【问题标题】:Cloning a Postgres table, including indexes and data克隆 Postgres 表,包括索引和数据
【发布时间】:2021-05-21 11:08:55
【问题描述】:

我正在尝试使用 plpgsql 创建 Postgres 表的克隆。 迄今为止,我一直只是截断表 2 并重新插入表 1 中的数据。

 TRUNCATE TABLE "dbPlan"."tb_plan_next";
 INSERT INTO "dbPlan"."tb_plan_next" SELECT * FROM "dbPlan"."tb_plan";

作为代码,这按预期工作,但是“dbPlan”.“tb_plan”包含大约 300 万条记录,因此在大约 20 分钟内完成。这太长了,会对其他进程产生连锁反应。

将所有约束、索引和数据准确复制到表 2 中非常重要。

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

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";

有没有更好的方法来实现这一点?

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

【问题讨论】:

    标签: postgresql performance clone


    【解决方案1】:

    PostgreSQL 没有提供一种非常优雅的方式来做到这一点。您可以将 pg_dump 与 -t--section= 一起使用来转储表的前数据和后数据。然后,您将重放 pre-data 以创建表结构和检查约束,然后从您获取数据的任何位置加载数据,然后重放 post-data 以添加索引和 FK 约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2012-09-10
      • 2018-08-31
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多