Jer*_*ome 10 postgresql foreign-key restore pg-dump postgresql-9.4
在从 恢复数据库时pg_dump
,会产生许多错误,随后整个表都会被忽略。一个例子:
ERROR: insert or update on table "channelproducts" violates foreign key constraint "fk_rails_dfaae373a5"
DETAIL: Key (channel_id)=(1) is not present in table "channels".
Run Code Online (Sandbox Code Playgroud)
有趣的是,我注意到所有这些实例都是由于加载顺序而弹出的。channels
是channelproducts
按字母顺序和在文件中之后,因此我可以理解为什么 postgres 抱怨必须创建一个没有父母的孩子。
警告:外键是由 rails 4.2 自动生成的:我可以从源头上删除问题,但这仍然没有真正解决问题......
版本:PostgreSQL 9.4.4。
psql
如果已经创建了数据库表和列,那么如何从外键约束的情况中恢复?
ach*_*imh 10
您可以放在SET session_replication_role = replica;
SQL 文件的顶部。这将在数据插入期间忽略约束 由于设置是基于会话的,因此约束将继续在此脚本之外工作。
但要注意:如果在此设置处于活动状态时创建不一致的数据,postgres 将保留它们。仅在插入/更新时检查约束。
请参阅https://www.endpoint.com/blog/2015/01/28/postgres-sessionreplication-role更深入地讨论这种方法的优缺点。
归档时间: |
|
查看次数: |
23692 次 |
最近记录: |