pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pg_dumpall — 将一个PostgreSQL数据库集簇转储为脚本文件
pg_dumpall [option...]
pg_dumpall是一个实用程序,用于写出(“转储”)一个集簇中的所有PostgreSQL数据库到一个脚本文件中。该脚本文件包含SQL命令,可作为psql的输入来恢复这些数据库。它通过对集簇中的每个数据库调用pg_dump来实现这一点。pg_dumpall还会转储所有数据库共有的全局对象。 (pg_dump不会保存这些对象。) 目前包括数据库用户和组,以及适用于整个数据库的访问权限的信息。
由于pg_dumpall会读取所有数据库中的表,因此通常必须以数据库超级用户身份连接,才能生成完整的转储。另外,要执行保存的脚本,也需要具备超级用户权限,这样才能添加用户和组并创建数据库。
SQL 脚本将写入标准输出。应使用 shell 操作符将其重定向到文件。
pg_dumpall需要多次连接到PostgreSQL服务器(每个数据库一次)。如果使用密码认证,它每次都会提示输入密码。在这种情况下准备一个~/.pgpass文件会比较方便。详见第 29.13 节。
下列命令行选项控制输出的内容和格式。
-a--data-only只转储数据,不转储模式(数据定义)。
-c--clean包含用于在重新创建数据库之前清理(删除)数据库的 SQL 命令。也会添加用于角色和表空间的DROP命令。
-d--inserts将数据转储为INSERT命令(而不是COPY)。这会使恢复非常缓慢;它主要用于生成可以装入非PostgreSQL数据库的转储。注意,如果重新安排了列顺序,恢复可能会彻底失败。-D选项更安全,但速度更慢。
-D--column-inserts--attribute-inserts将数据转储为带显式列名的INSERT命令(INSERT INTO )。这会使恢复非常缓慢;它主要用于生成可以装入非PostgreSQL数据库的转储。table (column, ...) VALUES ...
-g--globals-only只转储全局对象(角色和表空间),不转储数据库。
-i--ignore-version忽略pg_dumpall与数据库服务器之间的版本不匹配。
pg_dumpall可以处理PostgreSQL以前版本的数据库,但非常老的版本不再受支持(目前是 7.0 之前)。如果需要跳过版本检查,可使用此选项(如果pg_dumpall随后失败,别怪我们没有提醒你)。
-o--oids将对象标识符(OID)作为每个表的数据的一部分进行转储。如果应用程序以某种方式引用 OID 列(例如在外键约束中),请使用此选项。否则,不应使用此选项。
-O--no-owner不要输出用于将对象所有权设置为与原始数据库一致的命令。默认情况下,pg_dumpall 会发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句,以设置已创建模式元素的所有权。除非该脚本由超级用户(或拥有脚本中全部对象的同一用户)启动,否则这些语句在运行时会失败。若要创建一个可由任意用户恢复、并让该用户获得所有对象所有权的脚本,请指定 -O。
-s--schema-only只转储对象定义(模式),而不转储数据。
-S username--superuser=username指定在禁用触发器时要使用的超级用户名。只有在使用 --disable-triggers 时才相关。(通常更好的做法是省略此选项,而以超级用户身份运行生成的脚本。)
-v--verbose指定详细模式。这会让 pg_dumpall 把开始/停止时间写入转储文件,并将进度消息输出到标准错误。它还会启用 pg_dump 的详细输出。
-x--no-privileges--no-acl防止转储访问权限(grant/revoke 命令)。
--disable-dollar-quoting此选项禁用函数体中的 dollar quoting,并强制改用 SQL 标准字符串语法对它们进行引用。
--disable-triggers此选项只在创建只包含数据而不包含模式的转储时才相关。它指示 pg_dumpall 在输出中包含一些命令,以便在重新载入数据时临时禁用目标表上的触发器。如果这些表上存在不希望在数据重新载入期间触发的引用完整性检查或其他触发器,请使用此选项。
目前,为 --disable-triggers 输出的这些命令必须由超级用户执行。因此,还应通过 -S 指定一个超级用户名,或者更好的做法是确保以超级用户身份运行生成的脚本。
--use-set-session-authorization输出符合 SQL 标准的 SET SESSION AUTHORIZATION 命令,而不是用 ALTER OWNER 命令来确定对象所有权。这会让转储更符合标准,但根据转储中对象的历史,可能无法正确恢复。
下列命令行选项控制数据库连接参数。
host指定运行数据库服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自 PGHOST 环境变量(如果已设置);否则会尝试使用 Unix 域套接字连接。
port指定服务器监听连接的 TCP 端口,或本地 Unix 域套接字文件扩展名。默认值取自PGPORT环境变量(如果已设置),否则使用编译时默认值。
username用于连接的用户名。
强制提示输入密码。如果服务器要求密码认证,这应该会自动发生。
由于pg_dumpall在内部调用pg_dump,因此某些诊断消息会提到pg_dump。
恢复完成后,最好对每个数据库运行ANALYZE,以便优化器获得有用的统计信息。也可以运行vacuumdb -a -z来分析所有数据库。
pg_dumpall要求在恢复之前,所有必需的表空间目录都已经存在;否则,位于非默认位置的数据库在创建时将会失败。
要转储所有数据库:
$pg_dumpall > db.out
要从此文件重新装载数据库,可以使用:
$psql -f db.out postgres
(这里连接哪个数据库并不重要,因为 pg_dumpall 创建的脚本文件会包含适当的命令,用于创建并连接到已保存的数据库。)
有关可能出现的错误情况,请参见pg_dump。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。