我有一个Bacula脚本,可以自动备份Postgres数据库。 该脚本使用数据库的(pg_dump)进行两个备份:
仅架构和数据只。
/usr/bin/pg_dump --format=c -s $dbname --file=$DUMPDIR/$dbname.schema.dump /usr/bin/pg_dump --format=c -a $dbname --file=$DUMPDIR/$dbname.data.dump
问题是,我不知道如何使用pg_restore来恢复它。
我是否需要先创build数据库和用户,然后再恢复架构,最后才能恢复数据。
我做了以下几点:
pg_restore --format=c -s -C -d template1 xxx.schema.dump pg_restore --format=c -a -d xxx xxx.data.dump
这第一次还原创build数据库与表格,但第二个给出了许多错误,如下所示:
pg_restore: [archiver (db)] COPY failed: ERROR: insert or update on table "Table1" violates foreign key constraint "fkf6977a478dd41734" DETAIL: Key (contentid)=(1474566) is not present in table "Table23".
有任何想法吗?
使用pg_restore执行仅数据恢复时,您需要--disable-triggers 。 通常情况下,数据添加后,模式+数据恢复将创build参照完整性触发器。 如果只是恢复一个模式,那么在表中没有数据的情况下创build触发器,并且数据库期望在此之后添加的任何数据符合触发器。
禁用触发器要求您使用postgres超级用户帐户来恢复数据。