pg_dumpall

Name

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

Synopsis

pg_dumpall [选项...]

描述

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

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

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

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

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

选项

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

-c
--clean

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

-d
--inserts

把数据当作 INSERT 命令输出(而不是 COPY)。这样将令恢复过程非常缓慢, 但是会令输出更容易移植到其他 RDBMS 包中。

-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 字段,那么使用这个选项 (比如,在外键约束里)。否则,不应该使用这个选项。

-v
--verbose

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

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

-h host

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

-p port

服务器监听的端口号. 缺省是 PGPORT 环境变量(如果设置了), 或者是编译时的缺省.

-U username

以给定用户身分联接.

-W

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

只有在某些平台上才能用长选项。

环境

PGHOST
PGPORT
PGUSER

缺省连接参数。

注意

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

pg_dumpall 需要与 PostgreSQL 服务器连接好几次。如果配置了口令认证,它每次都需要询问口令。 这种情况下我们设置一个口令文件会方便些。

例子

转储所有数据库:

$ pg_dumpall > db.out

重载这个数据库,

$ psql -f db.out template1

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

又见

pg_dumppsql. 看看哪里获取可能的错误条件的详细信息.