0

我目前正致力于以一种允许我们从该客户的基本结构创建新数据库的方式转储我们客户的一个数据库,但不携带他们的私人数据。

到目前为止,我已经成功地pg_dump结合了--exclude_tableandexclude-table-data命令,这使我能够只带来执行此任务所需的数据。

但是,有一些表将引用我留下的一些数据的行与引用我必须带来的数据的其他行混合在一起,这导致我在还原操作期间出现了一些问题。具体来说,当转储尝试FOREIGN KEY对这些表上的某些列实施约束时,它会失败,因为有些行的键在相应的外部表上没有匹配的数据——因为我选择不带这个表的数据!

我知道我可以在转储完成后登录数据库,删除任何引用不再存在的数据的行并自己创建约束,但我想尽可能地自动化这个过程。如果表 B 的数据从备份中排除,是否有办法告诉pg_dump或(或任何其他程序)不从表 A 中获取行?pg_restore或者告诉 Postgres 在导入表的数据之前我想让那个特定的外键处于活动状态?

作为参考,我在 HREL 7 服务器上使用 PostgreSQL 9.2。

4

1 回答 1

0

如果在恢复数据库转储时禁用外键检查会怎样?然后从引用表中删除孤独的行。

顺便说一句,我建议你修复你的数据库模式,这样就不会有错误的元组被插入到你的数据库中。

于 2018-02-24T10:43:50.087 回答