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

从我读到的内容来看,这可能是错误的,要找到一个好的PostgreSQL博客一直很困难,所以请随时向我推荐一些博客,我需要弄清楚该应用程序的工作方式,以便可以信任自己的备份和Slony复制。我让开发人员还原了我通过选择custom时通过directorytarOID格式从PgadminIII获取的备份,但他说其中两个未加载,tar可以加载,但这只是目录,而不是数据。我现在真的很困惑。


我正在使用PGAdminIII,它具有pg_dumppg_dumpall选项。我想备份所有需要测试的东西,以便将该数据库还原到某个地方,并确认是的,我们需要的所有数据以及我们的备份都很好。最终我想一次写一个自动恢复脚本,但是一次只写一天。

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

我以为pg_dumpall至少会备份外键,但这似乎还是一个“选项”。根据文档,即使使用pg_dumpall,我也需要使用-o选项来备份外键,但我真的无法想象何时不希望备份外键,这作为默认选项会更有意义。 >

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

我有PostgreSQL服务器,但我仍然无法理解为什么该应用程序无法备份OID s默认!好像有99.9%的时间需要。

更新1:

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

编辑:被网站要求通过编辑我的问题来显示该问题的独特性。这个问题引起了问题,并弄清了备份中的OID,全局变量和非全局变量之间的差异,以及测试了还原建议以确保备份良好,而不是仅仅备份。根据答案,我能够进行备份,找出全局变量/ oid,并使用cron作业每晚在Postgres上开始测试还原过程。感谢您的帮助!

评论

PostgreSQL完整数据库备份的可能副本

#1 楼

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



 $ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql
 


这包括全局信息-有关用户和组,表空间等的信息。

如果要备份一个数据库并将其移至临时服务器,我将使用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
 


输出只是文本文件。

将这些文件移动到其他服务器后,请先加载全局变量,然后再加载数据库转储。

 $ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql
 



我认为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沙箱
–SebK
16年7月19日在5:20

可以看到9.5版的pg_dumpall在使用COPY时不能正确使用NULL值。我收到许多这样的错误:psql:/tmp/dumpall.sql:4133559:无效的命令\ N psql:/tmp/dumpall.sql:4133560:无效的命令\。使用psql -f /tmp/dumpall.sql导入回Postgres 10时

–piotrekkr
19年8月13日在10:51