pg_dumpall

Name

pg_dumpall -- 抽出一个 PostgreSQL 数据库集群到脚本文件中

Synopsis

pg_dumpall [option...]

描述

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

因此,pg_dumpall 是备份你的数据库的一体化解决方案。 但是请注意它的局限性:它无法转储"大对象",因为 pg_dump 无法把这样的对象转储到纯文本文件中。如果你的数据库里有大对象, 那么你应该使用 pg_dump 的非文本输出格式之一转储它们。

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

SQL脚本将写出到标准输出。你应该使用合适的 shell 操作符把它重定向到文件。

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

选项

下列命令行参数控制输出格式:

-a
--data-only

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

-c
--clean

包括那些重建之前清理(删除)数据库对象的SQL命令。

-d
--inserts

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

-D
--column-inserts
--attribute-inserts

把数据以带着明确字段名(INSERT INTO table (column, ...) VALUES ...)的 INSERT 命令形式转储出来。 这样会令恢复非常慢,这主要是用于让转储输出可以用于其它非 PostgreSQL 数据库。

-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

避免转储访问权限(授权/撤销命令)。

-X disable-dollar-quoting
--disable-dollar-quoting

这个选项关闭函数体的美元符号的使用,强制他们使用 SQL 标准的引号语法。

-X disable-triggers
--disable-triggers

这个选项只在创建仅有数据的转储的时候有用。它指示 pg_dumpall 包含在恢复数据的时候, 在目标表上临时关闭触发器的命令。如果在你的表上有参考完整检查或者其它你在数据恢复的时候不想调用的触发器, 那么请使用这个选项。

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

-X use-set-session-authorization
--use-set-session-authorization

这个选项已经废弃了,不过为了和 pg_dump 兼容,仍然保留。 输出标准的 SQL SET SESSION AUTHORIZATION 命令而不似乎 OWNER TO 命令。 这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题,那么可能不能正确恢复。

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

-h host

声明数据库服务器所运行的机器的主机名。 如果数值以斜杠开头,那么就把它用做 Unix 域套接字的目录。 缺省是从 PGHOST 环境变量里拿来的(如果设置了), 否则使用 Unix 域套接字。

-p port

声明服务器监听的 TCP 端口号或者 Unix 域套接字文件扩展。 缺省是 PGPORT 环境变量(如果设置了), 或者是编译时的缺省。

-U username

以给定用户身分联接。

-W

强制口令提示。如果服务器需要口令认证,那么这个动作应该自动发生。

环境

PGHOST
PGPORT
PGUSER

缺省连接参数。

注意

因为 pg_dumpall 内部调用 pg_dump,所以,一些诊断信息 可以参考 pg_dump

恢复完之后,我们建议在每个已恢复的对象上运行 ANALYZE。 这样优化器就可以得到有用的统计。 你也可以用 vacuumdb -a -z 清理所有数据库。

例子

转储所有数据库:

$ pg_dumpall > db.out

重载这个数据库,

$ psql -f db.out template1

(在这里你和哪个数据库联接并不重要,因为 pg_dumpall 创建的脚本文件将包含合适的命令用于创建和联接保存的数据库。)

又见

pg_dump, 看看那里获取可能的错误条件的详细信息。