Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14

pg_dumpall

名称

pg_dumpall -- 将一个PostgreSQL数据库集群转储到一个脚本文件中

大纲

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

描述

pg_dumpall可以转储一个数据库集群里的所有数据库到一个脚本文件。 该脚本文件包含可以用于作为psql输入的SQL命令, 从而恢复数据库。它通过对数据库集群里的每个数据库调用pg_dump 实现这个功能。pg_dumpall还转储出所有数据库公用的全局对象。 而pg_dump并不保存这些对象。 这些信息包括数据库用户和组、表空间,以及性能如适用于整个数据库的访问权限。

因为pg_dumpall从所有数据库中读取表, 所以你很可能需要以数据库超级用户的身份连接,这样才能生成完整的转储。同样, 你也需要超级用户的权限执行保存下来的脚本,这些才能增加用户和组,以及创建数据库。

SQL 脚本将写出到标准输出。使用[-f|file]选项或 shell 操作符把它重定向到文件。

pg_dumpall需要和PostgreSQL 服务器连接多次(每个数据库一次)。如果你使用口令认证,可能每次都会询问口令。 这种情况下写一个~/.pgpass可能会比较方便。 参阅第 31.15 节获取更多信息。

选项

下列命令行参数用于控制输出内容和格式:

-a
--data-only

只转储数据,不转储模式(数据定义)。

-c
--clean

在转储结果中包含那些重建之前清理(drop)数据库对象的 SQL 命令。 对规则和表空间的DROP也会添加进来。

-f filename
--file=filename

发送输出到指定的文件。如果省略了这个选项,就使用标准输出。

-g
--globals-only

只转储全局对象(角色和表空间),而不转储数据库。

-i
--ignore-version

一个现在已经忽略了的废弃选项。

-o
--oids

作为数据的一部分,为每个表都输出对象标识(OID)。 如果你的应用需要OID字段的话(比如在外键约束中用到),那么使用这个选项。 否则,不应该使用这个选项。

-O
--no-owner

不把对象的所有权设置为对应源数据库。pg_dumpall默认发出 ALTER OWNERSET 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 包含在恢复数据时临时关闭目标表上触发器的命令。如果在表上有参照完整性检查或者其它触发器, 而恢复数据的时候不想重载他们,那么就应该使用这个选项。

目前,为--disable-triggers发出的命令必须以超级用户来执行。因此, 你应该同时用-S声明一个超级用户名, 或者最好是用一个超级用户的身份来启动这个生成的脚本。

--inserts

把数据转储为INSERT命令(而不是COPY)。 这样将令恢复过程非常缓慢,这个选项主要用于制作那种可以用于其它非 PostgreSQL数据库的转储。请注意, 如果你重新排列了字段顺序,那么恢复可能会完全失败。--column-inserts 更安全,但是也更慢。

--lock-wait-timeout=timeout

在转储开始的时候不要等待请求一个共享表锁。相反,如果无法在指定的 timeout内锁住表则失败。 timeout可以用任意SET statement_timeout接受的格式声明。 允许的值依赖于你转储的服务器版本,但是自7.3以来,所有的版本都接受毫秒的整数值。 当从7.3以前的版本服务器中转储时,省略该选项。

--no-security-labels

不转储安全标签。

--no-tablespaces

不要输出为对象创建表空间或选择表空间的命令。有了该选项, 所有对象在转储期间都将在缺省的表空间中创建。

--no-unlogged-table-data

不要转储未记录表的内容。该选项对于表定义(模式)是否转储没有影响;它只阻止转储表的数据。

--quote-all-identifiers

强制给所有标识符加上引号。这在转储一个数据库到一个可能引入了额外关键字的新版本中时可能是有用的。

--use-set-session-authorization

输出符合 SQL 标准的SET SESSION AUTHORIZATION命令而不是ALTER OWNER 命令来确定对象所有权。这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题, 那么可能不能正确恢复。

-?
--help

显示关于pg_dumpall命令行参数的帮助然后退出。

下面的命令行参数控制数据库的连接参数。

-d connstr
--dbname=connstr

指定用于连接到服务器的参数,作为连接字符串。参阅第 31.1.1 节获取更多信息。

为了与其他客户端应用保持一致,这个选项被叫做--dbname,但是因为 pg_dumpall需要连接到多个数据库,所以连接字符串中的数据库名将会省略。 使用-l选项指定用于转储全局对象的数据库名和找出应该转储的其他数据库。

-h host
--host=host

指定运行服务器的主机名。如果数值以斜杠开头,则被用作到 Unix 域套接字的路径。 缺省从PGHOST环境变量中获取(如果设置了的话),否则,尝试一个 Unix 域套接字连接。

-l dbname
--database=dbname

指定用于转储全局对象的数据库名和找出应该转储的其他数据库。如果没有声明, 将使用postgres数据库,如果postgres数据库不存在, 则使用template1

-p port
--port=port

指定服务器正在侦听的 TCP 端口或本地 Unix 域套接字文件的扩展(描述符)。 缺省使用PGPORT环境变量(如果设置了的话),否则,编译时的缺省值。

-U username
--username=username

连接的用户名。

-w
--no-password

从不发出密码提示问题。如果服务器要求密码认证并且密码不可用于其他意思如 .pgpass文件,则连接尝试将会失败。 该选项在批量工作和不存在用户输入密码的脚本中很有帮助。

-W
--password

强制pg_dumpall在连接到数据库之前提示一个密码。

这个选项从来不是至关重要的,因为如果服务器需求密码认证,则pg_dumpall 自动提示一个密码。不过,pg_dumpall 将在找出服务器想要一个密码上浪费一个连接尝试。在某些情况下,值得输入-W 以避免额外的连接尝试。

请注意,密码提示将在每个要转储的数据库上发生。通常,建立一个~/.pgpass 文件比依赖于手动输入密码好的多。

--role=rolename

指定创建转储的角色名。这个选项导致连接到数据库之后pg_dumpall 发出一个SET ROLE rolename命令。 当认证的用户(通过-U指定)缺乏pg_dumpall所需的权限时是很有用的, 可以转变成有所需权限的角色。一些安装有反对作为超级用户直接登录的政策, 使用这个选项允许转储不违反该政策。

环境变量

PGHOST
PGOPTIONS
PGPORT
PGUSER

缺省连接参数。

这个功用,类似大多数其他PostgreSQL实用工具, 也使用由libpq支持的环境变量(参阅第 31.14 节)。

注意

因为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获取可能的错误条件的详细信息。