0

我们有一个包含数百个表的大型 PostgreSQL 转储,我可以使用 pg_restore 成功导入这些表。我们正在开发一个软件,它可以插入很多这样的表(约 100 个),每次运行我们都需要将这些表恢复到它们的原始状态(这意味着转储中的内容)。再次恢复原始转储需要很多时间,我们不能在每次调试会话之前等待半小时。所以我需要一种相对快速的方法来将这些表恢复到从转储中恢复后的状态。

我尝试使用带有 -L 开关的 pg_restore 并选择这些表,但是在同时使用 --data-only 和 --clean 时出现重复键错误或“无法删除表 X,因为其他对象依赖它”错误仅使用 --clean。在 pg_restore 之前发出 SET CONSTRAINTS ALL DEFERRED 命令也不起作用。也许我的表格列表中的行都错了,现在是

491; 1259 39623998 TABLE public some_table some_user
8021; 0 0 COMMENT public TABLE some_table some_user
8022; 0 0 ACL public some_table some_user

对于每张桌子,然后

6700; 0 39624062 TABLE DATA public some_table postgres
8419; 0 0 SEQUENCE SET public some_table_pk_id_seq some_user

对于每张桌子。

我们只插入数据而不更新现有行,因此删除索引上方的所有行并重置序列可能会起作用,但我真的不想为所有一百个表手动创建这些命令,我​​什至没有即使我将级联设置为根据给定的行删除其他对象,它也可以确保它会起作用。

有没有人有更好的想法如何处理这个?

4

1 回答 1

3

因此,您正在寻找类似快照的东西,以便能够快速恢复到某个状态。

我不知道 PostgreSql 有可能回滚到某个时间戳。

在寻找解决方案时,我在这里找到了两个想法

  • create databasetemplate选项一起使用
  • 使用 VMWare 或 VirtualBox 虚拟化您的 PostgreSql 安装,并使用虚拟机的快照功能。

同样,这两个想法都是从上述来源复制的(我搜索了“postgresql db snapshots”)。

于 2013-06-18T15:20:44.623 回答