使用 pg_dump 制作数据库的精确副本的正确方法是什么?

cjo*_*nes 4 postgresql backup pg-dump postgresql-11

基本上,我正在尝试制作一个 SQL 转储来制作数据库的精确副本:用户定义的函数、关系、约束、表、数据等。

这是可行的pg_dump还是psql需要使用?

我一直在使用pg_dump -U user -cOx database > pg.sql,但我并不完全清楚它是否捕获了所有内容

我正在查看pg_dump这里的所有标志:

https://www.postgresql.org/docs/11/app-pgdump.html

我能想到的唯一一个可能会这样做的,因为它并没有真正明确地说,是-s --schema-only标志,它排除了数据。我对此很好,并pg_dump为数据运行了一秒钟,但我主要想确保我正在备份用户定义的函数、关系等。

J.D*_*.D. 5

我不是 PostgreSQL 专家,但我认为他们的文档相当清楚,我相信您使用的命令几乎是您所需要的(您可能需要使用标志指定密码 - 不确定),除非您确实想要分两步完成--schema-only,然后使用--data-only

pg_dump 是用于备份 PostgreSQL 数据库的实用程序。即使同时使用数据库,它也会进行一致的备份。

pg_dump 只转储单个数据库。要备份整个集群,或备份集群中所有数据库共有的全局对象(例如角色和表空间),请使用 pg_dumpall。

转储可以以脚本或存档文件格式输出。脚本转储是纯文本文件,其中包含将数据库重建到保存时的状态所需的 SQL 命令。要从这样的脚本恢复,请将其提供给 psql。

本教程pg_dumppg_dumpall应该可以帮助您前进。

最后,您可以做的最好的事情是在生成脚本后在测试数据库中运行脚本,并抽查您希望创建的不同内容(表、视图、主键、外键、其他约束等) ) 在对它来自的原始数据库进行任何重大更改之前。