Postgres 备份

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 来恢复它。

我是否需要先创建数据库和用户,然后恢复模式并最终恢复数据。

我做了以下事情:

pg_restore  --format=c -s -C -d template1 xxx.schema.dump
pg_restore  --format=c -a -d xxx xxx.data.dump

第一次恢复创建了带有空表的数据库,但第二次恢复出现了许多错误,如下所示:

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".

有任何想法吗?

答案1

使用 pg_restore 执行仅数据恢复时需要--disable-triggers。通常,模式+数据恢复会在添加数据后创建引用完整性触发器。如果您仅恢复模式,则触发器是在表中没有数据的情况下创建的,并且数据库期望此后添加的任何数据都符合触发器的要求。

禁用触发器需要您使用 postgres 超级用户帐户来恢复数据。

相关内容