pg_dumpall
pg_dumpall — 将一个 PostgreSQL 数据库集簇转储为脚本文件
当前查看 PostgreSQL 18.6。
说明
pg_dumpall — 将一个 PostgreSQL 数据库集簇转储为脚本文件
- 手册中的可执行程序
- pg_dumpall
- 程序版本
- 18.6
- 参考清单
- 客户端程序
- 选项定义组
- 55
用法
pg_dumpall [ connection-option ...] [ option ...]手册中的选项
| 选项与参数 | 说明 |
|---|---|
| -a --data-only | 只转储数据,不转储模式(数据定义)或统计信息。 |
| -c --clean | 在重新创建之前,输出用于 DROP 所有已转储数据库、角色和表空间的 SQL 命令。当恢复需要覆盖现有集簇时,此选项很有用。如果目标集簇中不存在某些对象,则恢复期间会报告可忽略的错误消息,除非还指定了 --if-exists 。 |
| -E encoding --encoding= encoding | 在指定的字符集编码中创建转储。默认情况下,转储将以数据库编码创建。(获得相同结果的另一种方法是将 PGCLIENTENCODING 环境变量设置为所需的转储编码。) |
| -f filename --file= filename | 将输出发送到指定文件。如果省略此选项,则使用标准输出。 |
| -g --globals-only | 只转储全局对象(角色和表空间),不转储数据库。 |
| -O --no-owner | 不要输出用于将对象所有权设置为与原始数据库一致的命令。默认情况下, pg_dumpall 会发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句,以设置已创建模式元素的所有权。除非该脚本由超级用户(或拥有脚本中全部对象的同一用户)启动,否则这些语句在运行时会失败。若要创建一个可由任意用户恢复、并让该用户获得所有对象所有权的脚本,请指定 -O 。 |
| -r --roles-only | 只转储角色,不转储数据库或表空间。 |
| -s --schema-only | 只转储对象定义(模式),不转储数据。 |
| -S username --superuser= username | 指定在禁用触发器时要使用的超级用户名。这只在使用 --disable-triggers 时相关。(通常最好省略它,而是以超级用户身份运行生成的脚本。) |
| -t --tablespaces-only | 只转储表空间,不转储数据库或角色。 |
| -v --verbose | 指定详细模式。这会让 pg_dumpall 把开始/停止时间写入转储文件,并将进度消息输出到标准错误。重复指定该选项会使更多调试级别的消息出现在标准错误中。该选项也会传递给 pg_dump 。 |
| -V --version | 打印 pg_dumpall 的版本并退出。 |
| -x --no-privileges --no-acl | 不转储访问权限(GRANT/REVOKE 命令)。 |
| --binary-upgrade | 此选项供就地升级实用程序使用。不建议也不支持将其用于其他目的。该选项的行为可能在未来的版本中更改而不另行通知。 |
| --column-inserts --attribute-inserts | 将数据转储为带有显式列名的 INSERT 命令( INSERT INTO table ( column , ...) VALUES ... )。这会使恢复变得非常缓慢;它主要用于生成可以装入非 PostgreSQL 数据库的转储。 |
| --disable-dollar-quoting | 此选项禁用对函数体的美元引用,并强制用 SQL 标准字符串语法对它们加引号。 |
| --disable-triggers | 此选项只在创建包含数据但不包含模式的转储时才相关。它指示 pg_dumpall 在输出中包含一些命令,以便在恢复数据时临时禁用目标表上的触发器。如果这些表上存在不希望在数据恢复期间触发的引用完整性检查或其他触发器,请使用此选项。 |
| --exclude-database= pattern | 不转储名称匹配 pattern 的数据库。可以多次写 --exclude-database 开关,以排除匹配所给模式中任意一个的数据库。 pattern 参数按照 psql 的 \d 命令所使用的同样规则解释(见 模式 ),因此也可以通过在模式中使用通配符来排除多个数据库。使用通配符时,如有需要请务必为模式加引号,以防止 shell 展开通配符。 |
| --extra-float-digits= ndigits | 在转储浮点数据时,使用指定的 extra_float_digits 值,而不是最大可用精度。出于备份目的的常规转储不应使用此选项。 |
| --filter= filename | 指定一个文件名,从中读取要从转储中排除的数据库名称的匹配模式。这些模式按照与 --exclude-database 相同的规则解释。要从 STDIN 读取,请使用 - 作为文件名。 --filter 可与 --exclude-database 结合使用以排除数据库,也可以指定多次以读取多个过滤文件。 |
| --if-exists | 使用 DROP ... IF EXISTS 命令在 --clean 模式下删除对象。这会抑制原本可能报告的 “ does not exist ” 错误信息。除非同时指定了 --clean ,否则此选项无效。 |
| --inserts | 将数据转储为 INSERT 命令(而不是 COPY )。这会使恢复非常缓慢;它主要用于生成可以装入非 PostgreSQL 数据库的转储。注意,如果重新安排了列顺序,恢复可能会彻底失败。 --column-inserts 选项可以避免列顺序变化带来的问题,但速度更慢。 |
| --load-via-partition-root | 当为表分区转储数据时,让 COPY 或 INSERT 语句以包含该分区的分区层次结构根为目标,而不是以该分区本身为目标。这会导致在加载数据时为每一行重新确定适当的分区。当在另一台服务器上恢复数据,而行并不总是落在与原始服务器相同的分区中时,这可能很有用。例如,如果分区列是 text 类型,而两个系统对用于排序该分区列的排序规则定义不同,就可能发生这种情况。 |
| --lock-wait-timeout= timeout | 在转储开始时,不要无限等待获取共享表锁。如果无法在指定的 timeout 内锁定某个表,就让转储失败。超时可以用 SET statement_timeout 接受的任意格式指定。 |
| --no-comments | 不要转储 COMMENT 命令。 |
| --no-data | 不要转储数据。 |
| --no-policies | 不要转储行安全性策略。 |
| --no-publications | 不要转储发布。 |
| --no-role-passwords | 不要转储角色密码。恢复后,角色的密码值将为 null,在设置密码之前,密码认证始终会失败。由于指定此选项时不需要密码值,角色信息将从目录视图 pg_roles 而不是 pg_authid 读取。因此,如果某些安全策略限制了对 pg_authid 的访问,此选项也会有帮助。 |
| --no-schema | 不要转储模式(数据定义)。 |
| --no-security-labels | 不要转储安全标签。 |
| --no-statistics | 不要转储统计信息。这是默认行为。 |
| --no-subscriptions | 不要转储订阅。 |
| --no-sync | 默认情况下, pg_dumpall 会等待所有文件都被安全写入磁盘。该选项会使 pg_dumpall 立即返回而不等待,这样更快,但意味着随后如果操作系统崩溃,转储可能会损坏。通常,此选项适用于测试,但不应在从生产安装转储数据时使用。 |
| --no-table-access-method | 不输出用于选择表访问方法的命令。使用此选项时,所有对象在恢复时都会使用当时默认的表访问方法创建。 |
| --no-tablespaces | 不输出创建表空间的命令,也不输出用于为对象选择表空间的命令。使用此选项时,所有对象在恢复时都会创建在当时默认的表空间中。 |
| --no-toast-compression | 不输出用于设置 TOAST 压缩方法的命令。使用此选项时,所有列都会以默认压缩设置恢复。 |
| --no-unlogged-table-data | 不要转储不记录 WAL 的表的内容。此选项不影响是否转储表定义(模式);它只会抑制转储表数据。 |
| --on-conflict-do-nothing | 为 INSERT 命令添加 ON CONFLICT DO NOTHING。此选项必须与 --inserts 或 --column-inserts 一起指定才有效。 |
| --quote-all-identifiers | 强制为所有标识符加引号。当从其 PostgreSQL 主版本与 pg_dumpall 不同的服务器转储数据库时,或者当输出打算装入另一主版本服务器中时,建议使用此选项。默认情况下, pg_dumpall 只会给在其自身主版本中属于保留字的标识符加引号。处理其他版本服务器时,这有时会带来兼容性问题,因为它们的保留字集合可能略有不同。使用 --quote-all-identifiers 可以避免这类问题,但代价是转储脚本更难阅读。 |
| --restrict-key= restrict_key | 在转储输出中,把给定字符串用作 psql 的 \restrict 键。若未指定限制键, pg_dumpall 会按需要随机生成一个。键只能包含字母数字字符。 |
| --rows-per-insert= nrows | 将数据转储为 INSERT 命令(而不是 COPY )。它控制每个 INSERT 命令的最大行数。指定的值必须是大于零的数字。恢复过程中的任何错误将导致只有属于有问题的 INSERT 的行丢失,而不是整个表的内容。 |
| --statistics | 转储优化器统计信息。 |
| --statistics-only | 只转储统计信息,不转储模式(数据定义)或数据。会转储表、物化视图、外部表和索引的优化器统计信息。 |
| --sequence-data | 在转储中包含序列数据。除非指定了 --no-data 、 --schema-only 或 --statistics-only ,否则这是默认行为。 |
| --use-set-session-authorization | 输出符合 SQL 标准的 SET SESSION AUTHORIZATION 命令,而不是用 ALTER OWNER 命令来确定对象所有权。这会让转储更符合标准,但根据转储中对象的历史,可能无法正确恢复。 |
| -? --help | 显示关于 pg_dumpall 命令行参数的帮助信息,并退出。 |
| -d connstr --dbname= connstr | 以 连接字符串 形式指定用于连接服务器的参数;这些参数将覆盖任何冲突的命令行选项。 |
| -h host --host= host | 指定运行数据库服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自 PGHOST 环境变量(如果已设置);否则会尝试使用 Unix 域套接字连接。 |
| -l dbname --database= dbname | 指定用于转储全局对象并发现还应转储哪些数据库的连接数据库名。如果未指定,则使用 postgres 数据库;如果该数据库不存在,则使用 template1 。 |
| -p port --port= port | 指定服务器正在监听连接的 TCP 端口,或本地 Unix 域套接字文件扩展名。默认值取自 PGPORT 环境变量(如果已设置),否则使用编译时默认值。 |
| -U username --username= username | 用于连接的用户名。 |
| -w --no-password | 绝不发出密码提示。如果服务器要求密码认证,而又无法通过 .pgpass 文件等其他方式获得密码,则连接尝试将失败。在没有用户在场输入密码的批处理作业和脚本中,此选项很有用。 |
| -W --password | 强制 pg_dumpall 在连接数据库之前提示输入密码。 |
| --role= rolename | 指定一个角色名,用于创建转储。此选项会使 pg_dumpall 在连接数据库后发出 SET ROLE rolename 命令。当已认证用户(由 -U 指定)缺少 pg_dumpall 所需权限,但可以切换到具备所需权限的角色时,这很有用。有些安装环境不允许直接以超级用户身份登录,而使用此选项可以在不违反该策略的情况下完成转储。 |
环境变量
| 变量 | 含义 |
|---|---|
| PGHOST PGOPTIONS PGPORT PGUSER | 默认连接参数 |
| PG_COLOR | 指定诊断消息是否使用颜色。可选值为 always 、 auto 和 never 。 |
手册定义
pg_dumpall
pg_dumpall — 将一个PostgreSQL数据库集簇转储为脚本文件
大纲
pg_dumpall [connection-option...] [option...]
说明
pg_dumpall是一个实用程序,用于写出(“转储”)一个集簇中的所有PostgreSQL数据库到一个脚本文件中。该脚本文件包含SQL命令,可作为psql的输入来恢复这些数据库。它通过对集簇中的每个数据库调用pg_dump来实现这一点。pg_dumpall还会转储所有数据库共有的全局对象,即数据库角色、表空间以及配置参数的权限授予。(pg_dump不会保存这些对象。)
由于pg_dumpall会读取所有数据库中的表,因此通常必须以数据库超级用户身份连接,才能生成完整的转储。另外,要执行保存的脚本,也需要具备超级用户权限,这样才能添加角色并创建数据库。
SQL 脚本将写入标准输出。使用-f/--file选项或 shell 操作符将其重定向到文件。
pg_dumpall需要多次连接到PostgreSQL服务器(每个数据库一次)。如果使用密码认证,它每次都会提示输入密码。在这种情况下准备一个~/.pgpass文件会比较方便。详见第 32.16 节。
警告
恢复转储会导致目标系统执行由源超级用户所选择的任意代码。部分转储和部分恢复也无法限制这一点。如果不信任源超级用户,则在恢复前必须检查转储出的 SQL 语句。注意,执行转储和恢复的客户端并不需要信任源超级用户或目标超级用户。
选项
以下命令行选项控制输出的内容和格式。
-a--data-only-
只转储数据,不转储模式(数据定义)或统计信息。
-c--clean-
在重新创建之前,输出用于
DROP所有已转储数据库、角色和表空间的 SQL 命令。当恢复需要覆盖现有集簇时,此选项很有用。如果目标集簇中不存在某些对象,则恢复期间会报告可忽略的错误消息,除非还指定了--if-exists。 -Eencoding--encoding=encoding-
在指定的字符集编码中创建转储。默认情况下,转储将以数据库编码创建。(获得相同结果的另一种方法是将
PGCLIENTENCODING环境变量设置为所需的转储编码。) -ffilename--file=filename-
将输出发送到指定文件。如果省略此选项,则使用标准输出。
-g--globals-only-
只转储全局对象(角色和表空间),不转储数据库。
-O--no-owner-
不要输出用于将对象所有权设置为与原始数据库一致的命令。默认情况下,pg_dumpall会发出
ALTER OWNER或SET SESSION AUTHORIZATION语句,以设置已创建模式元素的所有权。除非该脚本由超级用户(或拥有脚本中全部对象的同一用户)启动,否则这些语句在运行时会失败。若要创建一个可由任意用户恢复、并让该用户获得所有对象所有权的脚本,请指定-O。 -r--roles-only-
只转储角色,不转储数据库或表空间。
-s--schema-only-
只转储对象定义(模式),不转储数据。
-Susername--superuser=username-
指定在禁用触发器时要使用的超级用户名。这只在使用
--disable-triggers时相关。(通常最好省略它,而是以超级用户身份运行生成的脚本。) -t--tablespaces-only-
只转储表空间,不转储数据库或角色。
-v--verbose-
指定详细模式。这会让pg_dumpall把开始/停止时间写入转储文件,并将进度消息输出到标准错误。重复指定该选项会使更多调试级别的消息出现在标准错误中。该选项也会传递给pg_dump。
-V--version-
打印pg_dumpall的版本并退出。
-x--no-privileges--no-acl-
不转储访问权限(GRANT/REVOKE 命令)。
--binary-upgrade-
此选项供就地升级实用程序使用。不建议也不支持将其用于其他目的。该选项的行为可能在未来的版本中更改而不另行通知。
--column-inserts--attribute-inserts-
将数据转储为带有显式列名的
INSERT命令(INSERT INTO)。这会使恢复变得非常缓慢;它主要用于生成可以装入非 PostgreSQL 数据库的转储。table(column, ...) VALUES ... --disable-dollar-quoting-
此选项禁用对函数体的美元引用,并强制用 SQL 标准字符串语法对它们加引号。
--disable-triggers-
此选项只在创建包含数据但不包含模式的转储时才相关。它指示pg_dumpall在输出中包含一些命令,以便在恢复数据时临时禁用目标表上的触发器。如果这些表上存在不希望在数据恢复期间触发的引用完整性检查或其他触发器,请使用此选项。
目前,为
--disable-triggers输出的这些命令必须由超级用户执行。因此,还应通过-S指定一个超级用户名,或者更好的做法是确保以超级用户身份运行生成的脚本。 --exclude-database=pattern-
不转储名称匹配
pattern的数据库。可以多次写--exclude-database开关,以排除匹配所给模式中任意一个的数据库。pattern参数按照psql的\d命令所使用的同样规则解释(见模式),因此也可以通过在模式中使用通配符来排除多个数据库。使用通配符时,如有需要请务必为模式加引号,以防止 shell 展开通配符。 --extra-float-digits=ndigits-
在转储浮点数据时,使用指定的 extra_float_digits 值,而不是最大可用精度。出于备份目的的常规转储不应使用此选项。
--filter=filename-
指定一个文件名,从中读取要从转储中排除的数据库名称的匹配模式。这些模式按照与
--exclude-database相同的规则解释。要从STDIN读取,请使用-作为文件名。--filter可与--exclude-database结合使用以排除数据库,也可以指定多次以读取多个过滤文件。该文件每行列出一个数据库名匹配模式,格式如下:
exclude database
PATTERN以
#开头的行被视为注释并忽略。注释也可以放在对象匹配模式行之后。空白行同样会被忽略。有关如何在匹配模式中加引号,请参见模式。 --if-exists-
使用
DROP ... IF EXISTS命令在--clean模式下删除对象。这会抑制原本可能报告的“does not exist”错误信息。除非同时指定了--clean,否则此选项无效。 --inserts-
将数据转储为
INSERT命令(而不是COPY)。这会使恢复非常缓慢;它主要用于生成可以装入非 PostgreSQL 数据库的转储。注意,如果重新安排了列顺序,恢复可能会彻底失败。--column-inserts选项可以避免列顺序变化带来的问题,但速度更慢。 --load-via-partition-root-
当为表分区转储数据时,让
COPY或INSERT语句以包含该分区的分区层次结构根为目标,而不是以该分区本身为目标。这会导致在加载数据时为每一行重新确定适当的分区。当在另一台服务器上恢复数据,而行并不总是落在与原始服务器相同的分区中时,这可能很有用。例如,如果分区列是 text 类型,而两个系统对用于排序该分区列的排序规则定义不同,就可能发生这种情况。 --lock-wait-timeout=timeout-
在转储开始时,不要无限等待获取共享表锁。如果无法在指定的
timeout内锁定某个表,就让转储失败。超时可以用SET statement_timeout接受的任意格式指定。 --no-comments-
不要转储
COMMENT命令。 --no-data-
不要转储数据。
--no-policies-
不要转储行安全性策略。
--no-publications-
不要转储发布。
--no-role-passwords-
不要转储角色密码。恢复后,角色的密码值将为 null,在设置密码之前,密码认证始终会失败。由于指定此选项时不需要密码值,角色信息将从目录视图
pg_roles而不是pg_authid读取。因此,如果某些安全策略限制了对pg_authid的访问,此选项也会有帮助。 --no-schema-
不要转储模式(数据定义)。
--no-security-labels-
不要转储安全标签。
--no-statistics-
不要转储统计信息。这是默认行为。
--no-subscriptions-
不要转储订阅。
--no-sync-
默认情况下,
pg_dumpall会等待所有文件都被安全写入磁盘。该选项会使pg_dumpall立即返回而不等待,这样更快,但意味着随后如果操作系统崩溃,转储可能会损坏。通常,此选项适用于测试,但不应在从生产安装转储数据时使用。 --no-table-access-method-
不输出用于选择表访问方法的命令。使用此选项时,所有对象在恢复时都会使用当时默认的表访问方法创建。
--no-tablespaces-
不输出创建表空间的命令,也不输出用于为对象选择表空间的命令。使用此选项时,所有对象在恢复时都会创建在当时默认的表空间中。
--no-toast-compression-
不输出用于设置TOAST压缩方法的命令。使用此选项时,所有列都会以默认压缩设置恢复。
--no-unlogged-table-data-
不要转储不记录 WAL 的表的内容。此选项不影响是否转储表定义(模式);它只会抑制转储表数据。
--on-conflict-do-nothing-
为 INSERT 命令添加 ON CONFLICT DO NOTHING。此选项必须与 --inserts 或 --column-inserts 一起指定才有效。
--quote-all-identifiers-
强制为所有标识符加引号。当从其PostgreSQL主版本与pg_dumpall不同的服务器转储数据库时,或者当输出打算装入另一主版本服务器中时,建议使用此选项。默认情况下,pg_dumpall只会给在其自身主版本中属于保留字的标识符加引号。处理其他版本服务器时,这有时会带来兼容性问题,因为它们的保留字集合可能略有不同。使用
--quote-all-identifiers可以避免这类问题,但代价是转储脚本更难阅读。 --restrict-key=restrict_key-
在转储输出中,把给定字符串用作psql的
\restrict键。若未指定限制键,pg_dumpall会按需要随机生成一个。键只能包含字母数字字符。此选项主要用于测试以及其他需要可重复输出的场景(例如比较转储文件)。一般不建议使用它,因为若恶意服务器事先知道该键,可能能够注入任意代码,并在运行 psql 处理转储输出的机器上执行。
--rows-per-insert=nrows-
将数据转储为
INSERT命令(而不是COPY)。它控制每个INSERT命令的最大行数。指定的值必须是大于零的数字。恢复过程中的任何错误将导致只有属于有问题的INSERT的行丢失,而不是整个表的内容。 --statistics-
转储优化器统计信息。
--statistics-only-
只转储统计信息,不转储模式(数据定义)或数据。会转储表、物化视图、外部表和索引的优化器统计信息。
--sequence-data-
在转储中包含序列数据。除非指定了
--no-data、--schema-only或--statistics-only,否则这是默认行为。 --use-set-session-authorization-
输出符合 SQL 标准的
SET SESSION AUTHORIZATION命令,而不是用ALTER OWNER命令来确定对象所有权。这会让转储更符合标准,但根据转储中对象的历史,可能无法正确恢复。 -?--help-
显示关于pg_dumpall命令行参数的帮助信息,并退出。
以下命令行选项控制数据库连接参数。
-dconnstr--dbname=connstr-
以连接字符串形式指定用于连接服务器的参数;这些参数将覆盖任何冲突的命令行选项。
该选项名为
--dbname,是为了与其他客户端应用程序保持一致;但由于pg_dumpall需要连接多个数据库,连接字符串中的数据库名将被忽略。请使用-l选项指定初始连接所用的数据库名,该连接将用于转储全局对象并发现还应转储哪些数据库。 -hhost--host=host-
指定运行数据库服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自
PGHOST环境变量(如果已设置);否则会尝试使用 Unix 域套接字连接。 -ldbname--database=dbname-
指定用于转储全局对象并发现还应转储哪些数据库的连接数据库名。如果未指定,则使用
postgres数据库;如果该数据库不存在,则使用template1。 -pport--port=port-
指定服务器正在监听连接的 TCP 端口,或本地 Unix 域套接字文件扩展名。默认值取自
PGPORT环境变量(如果已设置),否则使用编译时默认值。 -Uusername--username=username-
用于连接的用户名。
-w--no-password-
绝不发出密码提示。如果服务器要求密码认证,而又无法通过
.pgpass文件等其他方式获得密码,则连接尝试将失败。在没有用户在场输入密码的批处理作业和脚本中,此选项很有用。 -W--password-
强制pg_dumpall在连接数据库之前提示输入密码。
此选项从来都不是必需的,因为如果服务器要求密码认证,pg_dumpall会自动提示输入密码。不过,pg_dumpall会浪费一次连接尝试来发现服务器需要密码。在某些情况下,键入
-W以避免这次额外的连接尝试是值得的。注意,对每个要转储的数据库都会再次提示输入密码。通常,最好设置一个
~/.pgpass文件,而不是依赖手工输入密码。 --role=rolename-
指定一个角色名,用于创建转储。此选项会使pg_dumpall在连接数据库后发出
SET ROLErolename命令。当已认证用户(由-U指定)缺少pg_dumpall所需权限,但可以切换到具备所需权限的角色时,这很有用。有些安装环境不允许直接以超级用户身份登录,而使用此选项可以在不违反该策略的情况下完成转储。
环境
PGHOSTPGOPTIONSPGPORTPGUSER-
默认连接参数
PG_COLOR-
指定诊断消息是否使用颜色。可选值为
always、auto和never。
与大多数其他 PostgreSQL 工具一样,此工具也使用 libpq 支持的环境变量(见第 32.15 节)。
注解
由于pg_dumpall在内部调用pg_dump,因此某些诊断消息会提到pg_dump。
即使目标是将转储脚本恢复到一个全新的集簇中,--clean选项也可能很有用。使用--clean后,脚本可以删除并重新创建内置的postgres和template1数据库,从而确保这些数据库保留与源集簇中相同的属性(例如区域设置和编码)。如果不使用此选项,这些数据库将保留其现有的数据库级属性,以及任何预先存在的内容。
当指定了--statistics时,pg_dumpall会在生成的转储文件中包含大多数优化器统计信息。这并不包括所有统计信息,例如通过CREATE STATISTICS显式创建的统计信息、扩展添加的自定义统计信息,或累积统计系统收集的统计信息。因此,在从转储文件恢复后,对每个数据库再运行ANALYZE以确保最佳性能,仍然可能有益。也可以运行vacuumdb -a -z来分析所有数据库。
不应指望该转储脚本在执行时完全不出现错误。特别是,由于脚本会为源集簇中存在的每个角色发出CREATE ROLE,因此除非目标集簇使用不同的引导超级用户名初始化,否则一定会遇到针对引导超级用户的“role already exists”错误。这个错误是无害的,应当忽略。使用--clean还可能产生一些关于不存在对象的额外无害错误消息,不过可以通过添加--if-exists来尽量减少这些消息。
pg_dumpall要求在恢复之前,所有必需的表空间目录都已经存在;否则,位于非默认位置的数据库在创建时将会失败。
通常建议在从pg_dumpall脚本恢复数据库时使用-X(--no-psqlrc)选项,以确保恢复过程干净,并避免与非默认psql配置发生潜在冲突。此外,由于pg_dumpall脚本可能包含psql元命令,因此它可能与psql以外的客户端不兼容。
示例
要转储所有数据库:
$pg_dumpall > db.out
要从此文件恢复一个或多个数据库,可以使用:
$psql -X -f db.out -d postgres
这里连接到哪个数据库并不重要,因为pg_dumpall生成的脚本文件会包含用于创建已保存数据库并与之连接的相应命令。一个例外是,如果指定了--clean,则一开始必须连接到postgres数据库;脚本会立即尝试删除其他数据库,而对当前所连接的数据库执行该操作会失败。
另见
有关可能出现的错误情况,请参见pg_dump。
相关条目
文档与源码
来源构建
- 版本
- 18.6
- 构建
- https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 来源指纹
ee8d1a3612338fd9adf250730cb640fcc5233b5491337cc00a316a44e3a0b9f8
版本比较
PostgreSQL 12 → 13: 属性变化。
以下差异保留原始字段名与英文源描述。
--- PostgreSQL 12
+++ PostgreSQL 13
@@ -145,6 +145,13 @@
"signature": "--disable-triggers"
},
{
+ "description": "Do not dump databases whose name matches pattern . Multiple patterns can be excluded by writing multiple --exclude-database switches. The pattern parameter is interpreted as a pattern according to the same rules used by psql 's \\d commands (see Patterns below), so multiple databases can also be excluded by writing wildcard characters in the pattern. When using wildcards, be careful to quote the pattern if needed to prevent shell wildcard expansion.",
+ "names": [
+ "--exclude-database= pattern"
+ ],
+ "signature": "--exclude-database= pattern"
+ },
+ {
"description": "Use the specified value of extra_float_digits when dumping floating-point data, instead of the maximum available precision. Routine dumps made for backup purposes should not use this option.",
"names": [
"--extra-float-digits= ndigits"
@@ -152,13 +159,6 @@
"signature": "--extra-float-digits= ndigits"
},
{
- "description": "Do not dump databases whose name matches pattern . Multiple patterns can be excluded by writing multiple --exclude-database switches. The pattern parameter is interpreted as a pattern according to the same rules used by psql 's \\d commands (see Patterns ), so multiple databases can also be excluded by writing wildcard characters in the pattern. When using wildcards, be careful to quote the pattern if needed to prevent shell wildcard expansion.",
- "names": [
- "--exclude-database= pattern"
- ],
- "signature": "--exclude-database= pattern"
- },
- {
"description": "Use DROP ... IF EXISTS commands to drop objects in --clean mode. This suppresses “ does not exist ” errors that might otherwise be reported. This option is not valid unless --clean is also specified.",
"names": [
"--if-exists"
@@ -255,6 +255,13 @@
"--quote-all-identifiers"
],
"signature": "--quote-all-identifiers"
+ },
+ {
+ "description": "Use the provided string as the psql \\restrict key in the dump output. If no restrict key is specified, pg_dumpall will generate a random one as needed. Keys may contain only alphanumeric characters. This option is primarily intended for testing purposes and other scenarios that require repeatable output (e.g., comparing dump files). It is not recommended for general use, as a malicious server with advance knowledge of the key may be able to inject arbitrary code that will be executed on the machine that runs psql with the dump output.",
+ "names": [
+ "--restrict-key= restrict_key"
+ ],
+ "signature": "--restrict-key= restrict_key"
},
{
"description": "Dump data as INSERT commands (rather than COPY ). Controls the maximum number of rows per INSERT command. The value specified must be a number greater than zero. Any error during restoring will cause only rows that are part of the problematic INSERT to be lost, rather than the entire table contents.",
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
相关条目
导出 JSON · 返回命令行工具 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。