我们有一个包含数百个表的大型 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
对于每张桌子。
我们只插入数据而不更新现有行,因此删除索引上方的所有行并重置序列可能会起作用,但我真的不想为所有一百个表手动创建这些命令,我什至没有即使我将级联设置为根据给定的行删除其他对象,它也可以确保它会起作用。
有没有人有更好的想法如何处理这个?