我目前正在转储我们客户的一个数据库,这样我们就可以根据该客户的基本结构创建新的数据库,但不会带来他们的私人数据。
到目前为止,我已经成功地将pg_dump
与--exclude_table
和exclude-table-data
命令结合在一起,这使我只能带来执行此任务所需的有效数据。
但是,有一些表将引用我留下的一些数据的行与引用我必须携带的数据的其他行混合在一起,这在恢复操作过程中给我带来了一些问题。具体来说,当转储试图对这些表上的某些列强制执行FOREIGN KEY
约束时,它失败了,因为在相应的外部表上有一些带有键的行没有匹配的数据——因为我选择不带此表的数据!
我知道我可以在转储完成后登录到数据库,删除引用不再存在的数据的任何行,并自己创建约束,但我希望尽可能自动化这个过程。有没有办法告诉pg_dump
或pg_restore
(或任何其他程序),如果表a中的行引用了表B,如果表B的数据被排除在备份之外,就不要从表a中引入行?或者告诉Postgres,在导入表的数据之前,我想让特定的外键处于活动状态?
作为参考,我正在HREL7服务器上使用PostgreSQL9.2。
如果在恢复数据库转储时禁用外键检查,该怎么办?然后从引用表中删除孤独的行。
顺便说一句,我建议您修复数据库模式,这样就不会有错误的元组插入到数据库中。