我需要将数据库转储到2个sql文件中:ddl脚本和dml脚本。
我使用了pgadmin的gui,单击备份并仅选中Only schema
选项来创建ddl。接下来,我执行了相同的操作,但是我单击了Only data
创建dml。
问题是插入订单,并且在FK约束下导入失败。
例如,我有表Foo(id,foo_parent_id,...)并按此顺序插入:
insert into foo values(1, 3);
insert into foo values(2, 3);
insert into foo values(3, null);
在文件执行期间,由于ID 3的父代不存在,它在第一次插入时崩溃。有可能解决吗?我在docker postgres容器中执行了这些文件。谢谢。
您可以将外键约束更改为deferrable initially deferred
或deferrable
,并在开始插入数据之前显式推迟它。
这种方式将在事务结束时检查外键关系(这意味着如果还没有插入,则需要在事务中进行插入)。