备份 postgresql 数据库的最佳方法是什么?
我尝试使用 www.postgresql.org 上的文档,但在恢复时总是出现完整性错误。
现在我正在使用它进行备份:
pg_dump -U myuser -d mydatabase db.pg.dump
恢复:
pg_restore -c -r -U myuser -d mydatabase db.pg.dump
但我没有得到预期的结果。
编辑:我应该注意,我的数据库有很多外键。
我看到的一些错误是:
ERROR: current transaction is aborted, commands ignored until end of transaction block
ERROR: zero-length delimited identifier at or near """"
LINE 1: ..._text_id_fkey" FOREIGN KEY ("text_id") REFERENCES ""."wiki_t...
答案1
来自 pg_restore 手册页:
pg_restore 是一个实用程序,用于从由 pg_dump(1) 创建的非纯文本格式的档案中恢复 PostgreSQL 数据库。
来自 pg_dump 手册页:
转储可以以脚本或存档文件格式输出。脚本转储是纯文本文件,其中包含将数据库重建为保存时的状态所需的 SQL 命令。要从这样的脚本恢复,请将其提供给 psql(1)。脚本文件可用于重建数据库,即使在其他机器和其他体系结构上也是如此;经过一些修改,甚至可以在其他 SQL 数据库产品上重建数据库。
必须使用替代存档文件格式和 pg_restore(1) 来重建数据库。它们允许 pg_restore 选择要恢复的内容,甚至可以在恢复之前重新排序项目。
您不是在告诉它以非纯文本格式转储。您是在告诉它恢复非纯文本格式。显然这不会起作用。
来自 pg_dump 手册页:
EXAMPLES
To dump a database called mydb into a SQL-script file:
$ pg_dump mydb > db.sql
To reload such a script into a (freshly created) database named newdb:
$ psql -d newdb -f db.sql
To dump a database into a custom-format archive file:
$ pg_dump -Fc mydb > db.dump
To reload an archive file into a (freshly created) database named newdb:
$ pg_restore -d newdb db.dump