pg_dumpall 可以转储一个数据库集群里的所有数据库到一个脚本文件。该脚本文件包含可以用于作为 psql 输入的 SQL 命令,从而恢复数据库。它通过对数据库集群里的每个数据库调用 pg_dump 实现这个功能。pg_dumpall 还转储出所有数据库公用的全局对象。而 pg_dump 并不保存这些对象。这些信息包括数据库用户和组以及适用于整个数据库的访问权限。
因为 pg_dumpall 从所有数据库中读取表,所以你很可能需要以数据库超级用户的身份连接,这样才能生成完整的转储。同样,你也需要超级用户的权限执行保存下来的脚本,这些才能增加用户和组,以及创建数据库。
SQL 脚本将写出到标准输出。你应该使用合适的 shell 操作符把它重定向到文件。
pg_dumpall 需要和 PostgreSQL 服务器连接多次(每个数据库一次)。如果你使用口令认证,可能每次都会询问口令。这种情况下写一个 ~/.pgpass 可能会比较方便。参阅节29.13获取更多信息。
下列命令行参数用于控制输出格式:
只转储数据,不转储模式(数据定义)。
在转储结果中包含那些重建之前清理(drop)数据库对象的 SQL 命令。对规则和表空间的 DROP 也会添加进来。
把数据转储为 INSERT 命令(而不是 COPY)。这样将令恢复过程非常缓慢,这个选项主要用于制作那种可以用于其它非 PostgreSQL 数据库的转储。请注意,如果你重新排列了字段顺序,那么恢复可能会完全失败。-D 更安全,但是也更慢。
把数据转储为带有明确字段名的 INSERT 命令(INSERT INTO table (column, ...) VALUES ...)。这样会导致恢复非常缓慢,它主要用于制作那种可以用于其它非 PostgreSQL 数据库的转储。
只转储全局对象(角色和表空间),而不转储数据库。
忽略 pg_dumpall 和数据库服务器之间的版本差别。
pg_dumpall 可以处理老版本的 PostgreSQL 的数据库,但是太老的数据库就不再支持了(目前到 7.0)。如果你需要跳过版本检查,那么可以使用这个选项(如果 pg_dumpall 失败了,可别说我们没警告过你。)
作为数据的一部分,为每个表都输出对象标识(OID)。如果你的应用需要 OID 字段的话(比如在外键约束中用到),那么使用这个选项。否则,不应该使用这个选项。
不把对象的所有权设置为对应源数据库。pg_dumpall 默认发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句以设置创建的数据库对象的所有权。如果这些脚本将来没有被超级用户(或者拥有脚本中全部对象的用户)运行的话将会失败。-O 选项就是为了让该脚本可以被任何用户恢复并且将脚本中对象的所有权赋予该选项指定的用户。
只输出对象定义(模式),不输出数据。
指定关闭触发器时需要用到的超级用户名。它只有使用了 --disable-triggers 的时候才有影响。一般情况下最好不要输入这个参数,而是用超级用户启动生成的脚本。
指定冗余模式。这样将令 pg_dumpall 输出详细的对象评注以及转储文件的启停时间和进度信息到标准错误上。它将同时启用 pg_dump 的冗余输出。
禁止转储访问权限(grant/revoke 命令)
这个选项关闭使用美元符界定函数体。强制它们用 SQL 标准的字符串语法的引号包围。
这个选项只是和创建仅有数据的转储相关。它告诉 pg_dumpall 包含在恢复数据时临时关闭目标表上触发器的命令。如果在表上有参照完整性检查或者其它触发器,而恢复数据的时候不想重载他们,那么就应该使用这个选项。
目前,为 --disable-triggers 发出的命令必须以超级用户来执行。因此,你应该同时用 -S 声明一个超级用户名,或者最好是用一个超级用户的身份来启动这个生成的脚本。
输出符合 SQL 标准的 SET SESSION AUTHORIZATION 命令而不是 ALTER OWNER 命令。这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题,那么可能不能正确恢复。
下面的命令行参数控制数据库的连接参数。
指定运行服务器的主机名。如果数值以斜杠开头,则被用作到 Unix 域套接字的路径。缺省从 PGHOST 环境变量中获取(如果设置了的话),否则,尝试一个 Unix 域套接字连接。
指定服务器正在侦听的 TCP 端口或本地 Unix 域套接字文件的扩展(描述符)。缺省使用 PGPORT 环境变量(如果设置了的话),否则,编译时的缺省值。
连接的用户名
强制口令提示。如果服务器需要口令认证,那么这个动作应该自动发生。
因为 pg_dumpall 在内部调用 pg_dump ,所以,一些诊断信息可以参考 pg_dump
恢复完之后,建议在每个已恢复的对象上运行 ANALYZE 。这样优化器就可以得到有用的统计。你也可以用 vacuumdb -a -z 清理所有数据库。
pg_dumpall 要求所有需要的表空间目录在进行恢复之前就必须存在,否则在非标准位置创建数据库将会失败。