pg_dumpall

Name

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

Synopsis

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可能会比较方便。参阅Section 31.14获取更多信息。

选项

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

-a
--data-only

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

-c
--clean

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

-f filename
--file=filename

发送输出到指定的文件中。如果这被省略,就是用标准输出。

-g
--globals-only

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

-i
--ignore-version

现在被忽略的一个弃用选项。

-o
--oids

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

-O
--no-owner

不把对象的所有权设置为对应源数据库。pg_dumpall ALTER OWNERSET SESSION AUTHORIZATION语句以设置创建的数据库对象的所有权。 如果这些脚本将来没有被超级用户(或者拥有脚本中全部对象的用户)运行的话将会失败。 -O选项就是为了让该脚本可以被任何用户恢复并且将脚本中对象的所有权赋予该选 项指定的用户。

--lock-wait-timeout=timeout

不要再开始转储时永远等待获取共享表锁。相反,如果不能在指定的 timeout内锁住一个表。timeout可以通过任何 SET statement_timeout接受的格式指定。允许该数值按照您正转储的 服务器的版本变化,但是一个整数的毫秒数可以被所有7.3以后的版本接受。当从7.3以前 的服务器转储时,忽略该选项。

--no-tablespaces

Do not output commands to create tablespaces nor select tablespaces for objects. With this option, all objects will be created in whichever tablespace is the default during restore.

-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

这个选项是用于就地升级工具。不建议也不支持用于其他目的。 该选项的性能可能在未来的版本中会改变而不会另行通知。

--inserts

它像INSERT命令(而不是COPY命令)一样转储数据。 这将使恢复非常缓慢;主要用于可以加载到非PostgreSQL 数据库的转储。然而,因为该选项为每一行生成一个单独的命令,重载一行的错误仅导致 丢失行而不是全部表内容。请注意恢复可能会完全失败,若您已重新安排列顺序。 --column-inserts选项相对于列顺序变化而言是安全的,尽管慢一些。

--column-inserts
--attribute-inserts

它像有显式列名的INSERT命令一样转储数据(INSERT INTO table(column, ...) VALUES ...)。这将使恢复非常缓慢;主要用于可以加载到非PostgreSQL 数据库的转储。然而,因为该选项为每一行生成一个单独的命令,重载一行的错误仅导致 丢失行而不是全部表内容。请注意恢复可能会完全失败,若您已重新安排列顺序。 --column-inserts选项相对于列顺序变化而言是安全的,尽管慢一些。

--disable-dollar-quoting

这个选项关闭使用美元符界定函数体。强制它们用SQL标准的字符串语法的引号包围。

--disable-triggers

这个选项只是和创建仅有数据的转储相关。它告诉pg_dumpall包含在恢复数据时临时关闭目标表上触发器的命令。 如果在表上有参照完整性检查或者其它触发器,而恢复数据的时候不想重载他们,那么就应该使用这个选项。

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

--use-set-session-authorization

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

-?
--help

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

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

-h host
--host=host

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

-l dbname
--database=dbname

声明连接到转储全局对象的数据库名称并发现什么样的其他数据库应该被转储。 若未指定,将会使用postgres数据库,如果不存在,就使用 template1

-p port
--port=port

指定服务器正在侦听的TC 端口或本地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支持的 环境变量。

注意

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

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

pg_dumpall要求所有需要的表空间目录在进行恢复之前就必须存在;否则, 在非标准位置创建数据库将会失败。

例子

转储所有数据库:

$ pg_dumpall > db.out

To reload database(s) from this file, you can use: 从这个文件里恢复数据库,你可以用:

$ psql -f db.out postgres

(执行这个命令的时候连接到哪个数据库无关紧要,因为pg_dumpall 创建的脚本将会包含恰当的创建和连接数据库的命令。)

又见

查阅pg_dump获取关于可能的错误情况的详细信息。