PostgreSQL 备份/恢复

PostgreSQL 备份/恢复

备份 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

相关内容