Postgres备份

我有一个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超级用户帐户来恢复数据。