pg_dumpall
pg_dumpall
把Greenplum数据库系统中的所有数据库提取到一个单一的脚本文件或者其他归档文件。
概要
pg_dumpall [connection_option ...] [dump_option ...]
描述
pg_dumpall是一种用于备份Greenplum数据库(或者PostgreSQL)实例中所有数据库的标准PostgreSQL工具,并且在Greenplum数据库中也受到支持。它会创建一个单一(非并行)转储文件。对于Greenplum数据库的例行备份,使用Greenplum数据库的备份工具gpcrondump会更好,因为它的性能最佳。
pg_dumpall创建一个单一的脚本文件,其中包含可以被用作psql输入来恢复数据库的SQL命令。它会通过为每个数据库调用pg_dump来完成这件事。pg_dumpall还会转储对所有数据库公共的全局对象(pg_dump不保存这些对象)。当前这包括关于用户和组的信息以及适用于数据库整体的访问权限。
由于pg_dumpall会从所有数据库中读取表,用户将有很大可能不得不作为数据库超级用户连接以产生完整的转储。用还将需要超级用户特权以执行保存的脚本,以便允许增加用户和组以及创建数据库。
SQL脚本将被写到标准输出。shell操作符将被用来把它重定向到一个文件。
pg_dumpall需要多次连接到Greenplum数据库的Master服务器(每个数据库一次)。如果使用口令认证,它可能每次都要求口令。在这类情况下,使用~/.pgpass文件会很方便。
选项
- -a | --data-only
- 只转储数据,而不转储模式(数据定义)。这个选项只对纯文本格式有意义。对于归档格式,用户可以在调用pg_restore时指定该选项。
- -c | --clean
- 对文本输出文件增加命令以便在创建数据库对象(的命令)之前清除(删除)它们。这个选项只对纯文本格式有意义。对于归档格式,用户可以在调用pg_restore时指定该选项。
- -d | --inserts
- 把数据转储为INSERT命令(而不是COPY)。这将让恢复非常慢,它主要作用是让转储能被载入到不基于PostgreSQL的数据库。还有,由于这个选项为每行生成一个单独的命令,重新装载一行中的错误会导致只有该行被丢失而不是整个表内容。注意如果用户重新安排了列顺序,恢复可能一起失败。-D选项对列序更改是安全的,不过会更慢。
- -D | --column-inserts | --attribute-inserts
- 将数据转储为带有显式列名的INSERT命令( INSERT INTOtable(column, ...) VALUES ...)。这将让恢复非常慢,它主要作用是让转储能被载入到不基于PostgreSQL的数据库。还有,由于这个选项为每行生成一个单独的命令,重新装载一行中的错误会导致只有该行被丢失而不是整个表内容。
- -F | --filespaces
- 转储文件空间定义。
- -f filename | --file=filename
- 把输出发送到指定文件。
- -g | --globals-only
- 仅转储全局对象(角色和表空间),而非数据库。
- -i | --ignore-version
-
注意: 这个选项已被弃用并且将在未来的发行中被移除。忽略pg_dump和数据库服务器之间的版本失配。pg_dump可以从运行之前版本的Greenplum数据库(或者PostgreSQL)的服务器转储,但是非常老的版本可能不再被支持。如果用户需要覆盖版本检查,可使用这一选项。
- -o | --oids
- 将对象标识符(OID)转储为每个表数据的一部分。不推荐对将要恢复到Greenplum数据库的文件使用这一选项。
- -O | --no-owner
- 不要输出设置对象拥有关系的命令以匹配原始数据库。默认情况下,pg_dump会发出ALTER OWNER或者SET SESSION AUTHORIZATION语句以设置被创建的数据库对象的拥有关系。除非该脚本由超级用户(或者拥有脚本中所有对象的同一用户)启动,该脚本运行时这些语句将会失败。要让一个脚本能被任何用户恢复但给所有对象该用户的拥有关系,可指定-O。这个选项只对纯文本格式有意义。对于归档格式,用户可以在调用pg_restore时指定该选项。
- -s | --schema-only
- 仅转储对象定义(模式)而不转储数据。
- -S username | --superuser=username
-
指定在禁用触发器时要使用的超级用户用户名。只有在--disable-triggers被使用时这个选项才相关。去掉这个选项为好,转而作为超级用户启动结果脚本。注意: Greenplum数据库不支持用户定义的触发器。
- -t | --tablespaces-only
- 仅转储表空间而不转储数据库或者角色。
- -v | --verbose
- 执行详细模式。这将导致pg_dumpall输出详细的对象注释以及开始/停止时间到转储文件,并且把进度消息输出到标准错误。
- -x | --no-privileges | --no-acl
- 防止转储访问特权(GRANT/REVOKE命令)。
- --disable-dollar-quoting
- 这个选项禁用对函数体使用美元引用并且强制使用SQL标准的字符串语法引用它们。
- --disable-triggers
- 在创建只有数据的转储时,这个选项才相关。它指示pg_dumpall包括在重新装载数据时临时禁用目标表上触发器的命令。如果在表上有不想在数据重新装载时调用的触发器,就使用这个选项。为--disable-triggers发出的命令必须作为超级用户完成。因此,用户还应该用-S指定一个超级用户名,或者宁愿小心地作为超级用户启动结果脚本。注意: Greenplum数据库不支持用户定义的触发器。
- --resource-queues
- 转储资源队列定义。
- --roles-only
- 仅转储角色而不转储数据库、表空间或者文件空间。
- --use-set-session-authorization
- 输出SQL标准的SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令来确定对象拥有关系。这会让转储更加兼容标准,但会依赖转储中对象的历史,可能无法正确地恢复。使用SET SESSION AUTHORIZATION的转储将要求超级用户特权以正确地恢复,而ALTER OWNER则要求较少的特权。
- --gp-syntax
- 使用--gp-syntax转储CREATE TABLE语句中的Greenplum数据库语法。这允许Greenplum数据库表的分布策略(DISTRIBUTED BY或者DISTRIBUTED RANDOMLY子句)被转储,这对于恢复到其他Greenplum数据库系统很有用。
- --no-gp-syntax
- 在CREATE TABLE语句中不要输出表的分布子句。
- -h host | --host=host
- 指定Greenplum的Master数据库服务器在其上运行的机器的主机名。如果没有指定,会从环境变量PGHOST读取或者默认为localhost。
- -l dbname | --database=dbname
- 指定要连接到其中进行全局对象转储的数据库名。如果没有指定,会使用postgres数据库。如果postgres数据库不存在,则使用template1数据库。
- -p port | --port=port
- 指定Greenplum的Master数据库服务器在其上监听连接的TCP端口。如果没有指定,会从环境变量PGPORT读取或者默认为5432。
- -U username | --username= username
- 要用其进行连接的数据库角色名。如果没有指定,会从环境变量PGUSER读取或者默认为当前系统用户名。
- -w
- 绝不提示要求口令。
- -W | --password
- 强制口令提示。
注解
由于pg_dumpall内部调用pg_dump,一些诊断消息将需要参考pg_dump。
一旦完成恢复,在每个数据库上运行ANALYZE是明智的做法,这样查询规划器将会获得有用的统计信息。用户还可以运行vacuumdb -a -z来分析所有数据库。
pg_dumpall要求所有需要的表空间(文件空间)目录在恢复之前存在,否则数据库创建将因为数据库不在默认位置而失败。
示例
转储所有数据库:
pg_dumpall > db.out
重新装载这个文件:
psql template1 -f db.out
仅转储全局对象(包括文件空间和资源队列):
pg_dumpall -g -F --resource-queues