2
恢复转储时禁用所有约束和表检查
我已经获得了PostgreSQL数据库的转储,其中包括: pg_dump -U user-name -d db-name -f dumpfile 然后我继续使用以下命令在另一个数据库中还原: psql X -U postgres -d db-name-b -f dumpfile 我的问题是数据库包含引用约束,检查和触发器,并且其中某些(特别是看起来是检查的)约束在恢复期间失败,因为未按照导致遵守这些检查的顺序来加载信息。例如,在表中插入行可能与CHECK调用plpgsql函数检查条件是否存在于其他不相关的表中的函数相关联。如果后一个表未psql在前一个表之前加载,则会发生错误。 以下是产生这样的数据库的SSCCE,该数据库一旦被转储pg_dump就无法恢复: CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE TABLE IF NOT EXISTS a ( i INTEGER NOT NULL ); …