克隆 Postgres table,包括索引和数据

Cloning a Postgres table, including indexes and data

我正在尝试使用 plpgsql 创建 Postgres table 的克隆。 到目前为止,我只是简单地截断 table 2 并从 table 1.

重新插入数据
 TRUNCATE TABLE "dbPlan"."tb_plan_next";
 INSERT INTO "dbPlan"."tb_plan_next" SELECT * FROM "dbPlan"."tb_plan";

作为代码,这按预期工作,但是“dbPlan”。“tb_plan”包含大约 300 万条记录,因此在大约 20 分钟内完成。这太长了,对其他进程有影响。

所有约束、索引和数据都准确复制到 table 2.

很重要

我曾尝试删除 table 并重新创建它,但这并没有提高速度。

DROP TABLE IF EXISTS "dbPlan"."tb_plan_next";
CREATE TABLE "dbPlan"."tb_plan_next" (LIKE "dbPlan"."tb_plan" INCLUDING ALL);
INSERT INTO "dbPlan"."tb_plan_next" SELECT * FROM "dbPlan"."tb_plan";

有没有更好的实现方法?

我正在考虑创建 table 然后创建索引作为第二步。

PostgreSQL 没有提供一种非常优雅的方式来执行此操作。您可以使用 pg_dump 与 -t--section= 来转储前数据和 table 的 post 数据。然后您将重播前数据以创建 table 结构和检查约束,然后从您从任何地方获取数据加载数据,然后重播 post-data 以添加索引和 FK 约束.