如何获得有效且完整的 PostgreSQL 数据库备份和测试

Ali*_*ghi 53 postgresql backup pg-dump

我希望我能得到一个明确的答案,说明如何确保像使用 MS SQL Server 一样进行完整的 Postgres 备份,然后照顾孤立的用户。

从我读过的内容来看,这可能是错误的,找到一个好的 PostgreSQL 博客一直很有挑战性,所以请随时向我推荐一些,我需要弄清楚这个应用程序是如何工作的,这样我才能信任我的备份和 Slony复制。我让一位开发人员在选择s 时通过custom,directorytarformat恢复了我从 PgadminIII 获取的备份,OID但他说其中两个没有加载,tar但它只是目录,而不是数据。我现在真的很困惑。

  1. 我正在使用 PGAdminIII,它有一个pg_dumppg_dumpall选项。我想回到一切了,我需要测试恢复这个数据库的地方,并确认是的,我们需要的所有数据和我们的备份是好的。最终我想写一个自动恢复脚本,但一天一次。

pg_dumpall显然有一个-globals应该备份所有内容的选项,但帮助pg_dumpall显示了一个-g, --globals-only dump only global objects, no databases,而不是一个--globals选项。

我认为pg_dumpall至少会备份外键,但即使这样似乎也是一个“选项”。根据文档,即使pg_dumpall我需要使用一个-o选项来备份外键,我也无法想象什么时候我不想备份外键,而这作为默认选项更有意义。

  1. 我将如何照顾孤儿用户并验证我拥有一切?我想在另一台服务器上实际恢复我的备份文件并验证一切正常。如果有人对如何在 PostgreSQL 中进行真正的备份和恢复有任何建议,我将不胜感激。

我有一个 PostgreSQL 服务器,但我仍然无法理解为什么该应用程序OID默认情况下不会备份s!似乎 99.9% 的情况下您都希望如此。

更新1:

Postgres文档提到globals我正在寻找的选项似乎是此版本的默认选项,但它仍然需要该-o选项。如果有人可以验证或给我一个示例命令来恢复其他地方的单个数据库及其所需的一切,我将不胜感激。

编辑:被网站要求通过编辑我的问题来显示这个问题的独特性。这个问题提出了这个问题,并明确了备份中的 OID、全局和非全局之间的区别,以及测试恢复建议以确保备份是好的,而不是仅仅备份。由于这些答案,我能够备份、找出全局变量/oids,并使用 cron 作业在 Postgres 上每晚启动一个测试恢复过程。谢谢您的帮助!

Mik*_*ll' 65

您可以使用 pg_dumpall 转储整个 PostgreSQL 集群。这是单个集群的所有数据库和所有全局变量。从服务器上的命令行,我会做这样的事情。(我的监听端口 5433,而不是默认端口。)您可能需要也可能不需要 --clean 选项。

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql
Run Code Online (Sandbox Code Playgroud)

这包括全局信息——关于用户和组、表空间等的信息。

如果我要备份单个数据库并将其移动到暂存服务器,我会使用 pg_dump 转储数据库,并使用任一转储全局变量

  • pg_dumpall --globals-only, 或者
  • pg_dumpall --roles-only (如果你只需要角色)

像这样。

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql
Run Code Online (Sandbox Code Playgroud)

输出只是文本文件。

将这些文件移动到不同的服务器后,首先加载全局变量,然后是数据库转储。

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql
Run Code Online (Sandbox Code Playgroud)

我认为 pg_dumpall 至少会备份外键,但即使这样似乎也是一个“选项”。根据:http : //www.postgresql.org/docs/9.1/static/app-pg-dumpall.html即使使用 pg_dumpall 我也需要使用 -o 选项来备份外键

不,该参考说“如果您的应用程序以某种方式(例如,在外键约束中)引用 OID 列,请使用此选项。否则,不应使用此选项。” (强调。)我认为您的应用程序不太可能引用 OID 列。您不需要使用此选项来“备份外键”。(在您的编辑器或文件查看器中阅读转储文件。)

  • 导入 sandbox.sql 的行中是否缺少数据库名称?`psql -U postgres -h localhost -p 5433 沙箱&lt;沙箱.sql` (3认同)