PG_DUMPALL(1)

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

SYNOPSIS

pg_dumpall [ option... ]

DESCRIPTION 描述

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

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

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

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

pg_dumpall 需要和 PostgreSQL 服务器连接多次，可能每次都问你口令。这种情况下写一个 $HOME/.pgpass 可能会比较方便。

OPTIONS 选项

 下列命令行参数用于控制输出格式：

-a

--data-only
     只转储数据，不转储模式（数据定义）。

-c

--clean
     包括那些重建之前清理（删除）数据库对象的SQL命令。

-d

--inserts
     把数据当作 INSERT 命令输出（而不是 COPY）。这样将令恢复过程非常缓慢， 但是会令输出更容易移植到其他 SQL 数据库包中。

-D

--column-inserts

--attribute-inserts
     把数据以某种带着明确字段名（INSERT INTO table (column, ...) VALUES ...）的 INSERT 命令形式转储出来。 这样会令恢复非常慢，但是如果需要重排字段顺序就是必须的。

-g

--globals-only
     只转储全局对象（用户和组），而不转储数据库。

-i

--ignore-version
     忽略 pg_dumpall 和数据库服务器之间的版本差别。 pg_dumpall 可以处理来自以前版本的 PostgreSQL 的数据库，但是太老的数据库就不再支持了（目前到 7.0）。 如果你需要覆盖版本检查，那么可以使用这个选项（如果 pg_dumpall 失败了，可别说我们没警告你。）

-o

--oids
     为每个表转储对象标识符（OID）。 如果你的应用在某种角度引用了 OID 字段，那么使用这个选项 （比如，在外键约束里）。否则，不应该使用这个选项。

-s

--schema-only
     只转储模式（数据定义），不转储数据。

-v

--verbose
     声明冗余模式。这样将令 pg_dumpall 向标准错误打印进度信息。

-x

--no-privileges

--no-acl
     避免转储访问权限（授权/撤销命令）。

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

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

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

-U username
     以给定用户身分联接。

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

ENVIRONMENT 环境

PGHOST

PGPORT

PGUSER
     缺省连接参数。

NOTES 注意

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

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

EXAMPLES 例子

 转储所有数据库：

$ pg_dumpall > db.out

 重新载入这个数据库：

$ psql -f db.out template1

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

SEE ALSO 参见

pg_dump(1). Check there for details on possible error conditions.

译者
Postgresql 中文网站 何伟平 <laser@pgsqldb.org>