pg_dumpall

pg_dumpall —将 PostgreSQL 数据库集群提取到脚本文件中

Synopsis

pg_dumpall [ connection-option ...] [ option ...]

Description

pg_dumpall 是一个 Util,用于将集群的所有 PostgreSQL 数据库写出(“转储”)到一个脚本文件中。该脚本文件包含可以用作psql的 Importing 以还原数据库的 SQL 命令。它通过为集群中的每个数据库调用pg_dump来实现。 pg_dumpall 还转储所有数据库通用的全局对象,即数据库角色和表空间。 (pg_dump 不会保存这些对象.)

由于 pg_dumpall 从所有数据库读取表,因此您很可能必须以数据库超级用户身份连接才能产生完整的转储。另外,您将需要超级用户特权才能执行保存的脚本,以便被允许添加角色和创建数据库。

SQL 脚本将被写入标准输出。使用-f/--file选项或 Shell 运算符将其重定向到文件中。

pg_dumpall 需要多次连接到 PostgreSQL 服务器(每个数据库一次)。如果您使用密码验证,则每次都会要求 Importing 密码。在这种情况下,拥有~/.pgpass文件很方便。有关更多信息,请参见Section 34.15

Options

以下命令行选项控制输出的内容和格式。

当前,必须以超级用户身份执行为--disable-triggers发出的命令。因此,您还应该使用-S指定超级用户名,或者最好小心地以超级用户身份启动生成的脚本。

以下命令行选项控制数据库连接参数。

为了与其他 Client 端应用程序保持一致,该选项称为--dbname,但是由于 pg_dumpall 需要连接到许多数据库,因此连接字符串中的数据库名称将被忽略。使用-l选项指定用于初始连接的数据库的名称,该名称将转储全局对象并发现应转储的其他数据库。

这个选项从来都不是必须的,因为如果服务器要求密码认证,pg_dumpall 将自动提示 Importing 密码。但是,pg_dumpall 将浪费连接尝试,以发现服务器需要密码。在某些情况下,值得 Importing-W以避免额外的连接尝试。

请注意,对于每个要转储的数据库,都会再次出现密码提示。通常,设置~/.pgpass文件比依靠手动密码 Importing 更好。

Environment

与大多数其他 PostgreSQLUtil 一样,该 Util 也使用 libpq 支持的环境变量(请参见Section 34.14)。

Notes

由于 pg_dumpall 内部调用 pg_dump,因此某些诊断消息将引用 pg_dump。

即使您打算将转储脚本还原到新的群集中,--clean选项也很有用。使用--clean会授权脚本删除并重新创建内置postgrestemplate1数据库,从而确保这些数据库将保留与源群集中相同的属性(例如,区域设置和编码)。如果没有该选项,则这些数据库将保留其现有的数据库级属性以及所有先前存在的内容。

恢复后,明智的做法是在每个数据库上运行ANALYZE,以便优化器具有有用的统计信息。您也可以运行vacuumdb -a -z分析所有数据库。

转储脚本不应期望完全运行而不会出现错误。特别是,因为脚本将为源集群中存在的每个角色发出CREATE ROLE,所以可以肯定引导超级用户会遇到“角色已经存在”错误,除非目标集群是使用不同的引导超级用户名初始化的。该错误是无害的,应该忽略。使用--clean选项可能会产生有关不存在的对象的其他无害错误消息,尽管您可以通过添加--if-exists来将其最小化。

pg_dumpall 要求所有需要的表空间目录在还原之前都存在。否则,对于非默认位置的数据库,数据库创建将失败。

Examples

要转储所有数据库:

$ pg_dumpall > db.out

要从此文件重新加载数据库,可以使用:

$ psql -f db.out postgres

在这里连接哪个数据库并不重要,因为 pg_dumpall 创建的脚本文件将包含用于创建和连接到保存的数据库的适当命令。唯一的 exception 是,如果您指定--clean,则必须首先连接到postgres数据库;该脚本将尝试立即删除其他数据库,并且对于您连接的数据库将失败。

See Also

检查pg_dump以获取有关可能的错误情况的详细信息。

上一章 首页 下一章