克隆 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 约束.
我正在尝试使用 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 约束.