pg_dumpall
将Greenplum数据库系统中的所有数据库提取到单个脚本文件或其他归档文件中。
概要
pg_dumpall [connection-option ...] [dump_option ...]
pg_dumpall -? | --help
pg_dumpall -V | --version
描述
pg_dumpall是一个标准的PostgreSQL工具, 用于备份Greenplum数据库(或PostgreSQL)实例中的所有数据库,Greenplum数据库也支持该实用程序。 它创建一个(非并行)转储文件。 对于Greenplum数据库的常规备份,最好使用Greenplum数据库备份工具gpbackup以获得最佳性能。
pg_dumpall创建一个包含SQL命令的脚本文件, 该命令可用作psql还原数据库的输入。 它通过为每个数据库调用pg_dump来做到这一点。 pg_dumpall还转储所有数据库通用的全局对象。 (pg_dump不会保存这些对象。) 当前包括有关数据库用户和组的信息,以及整体上适用于数据库的访问权限。
由于pg_dumpall从所有数据库读取表,因此您很可能必须以数据库超级用户身份连接才能产生完整的转储。 另外,您将需要超级用户特权才能执行保存的脚本,以便被允许添加用户和组以及创建数据库。
SQL脚本将被写入标准输出。 使用[-f | —file]选项或shell运算符将其重定向到文件中。
pg_dumpall需要多次连接到Greenplum数据库master服务器(每个数据库一次)。 如果您使用密码验证,则很可能每次都要求输入密码。 在这种情况下,使用~/.pgpass文件很方便。
Note: --ignore-version选项已弃用,在以后的版本中将被删除。
选项
转储选项
-a | —data-only
仅转储数据,而不转储模式(数据定义)。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。
-c | —clean
在创建数据库对象(用于创建它们的命令)之前,输出用于清理(删除)数据库对象的命令。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。
-f filename | —file=filename
将输出发送到指定文件。
-g | —globals-only
仅转储全局对象(角色和表空间),而不转储数据库。
-i | —ignore-version
Note: 此选项已被弃用,并将在以后的版本中删除。
忽略pg_dump和数据库服务器之间的版本不匹配。 pg_dump可以从运行早期版本的Greenplum数据库(或PostgreSQL)的服务器中转储,但是可能不再支持非常旧的版本。 如果您需要覆盖版本检查,请使用此选项。
-o | —oids
转储对象标识符(OID)作为每个表的数据的一部分。 对于要还原到Greenplum数据库中的文件,建议不要使用此选项。
-O | —no-owner
不要输出命令来设置对象的所有权以匹配原始数据库。 默认情况下,pg_dump发出ALTER OWNER或SET SESSION AUTHORIZATION语句来设置创建的数据库对象的所有权。 除非由超级用户(或拥有脚本中所有对象的同一用户)启动脚本,否则运行脚本时这些语句将失败。 要使脚本可以被任何用户恢复,但将赋予该用户所有对象的所有权,请指定-O。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。
-r | —roles-only
仅转储角色,而不是数据库或表空间。
-s | —schema-only
仅转储对象定义(模式),而不转储数据。
-S username | —superuser=username
指定禁用触发器时要使用的超级用户名。 仅在使用--disable-triggers时才有意义。 最好不要这样做,而是以超级用户身份启动生成的脚本。
Note: Greenplum数据库不支持用户定义的触发器。
-t | —tablespaces-only
仅转储表空间,而不是数据库或角色。
-v | —verbose
指定详细模式。 这将导致pg_dump向转储文件输出详细的对象注释和开始/停止时间,并向标准错误输出消息。
-V | —version
打印pg_dumpall版本并退出。
-x | —no-privileges | —no-acl
防止转储访问权限(GRANT/REVOKE命令)。
--binary-upgrade
此选项供就地升级工具使用。 不建议或不支持将其用于其他目的。 该选项的行为在将来的版本中可能会更改,恕不另行通知。
--column-inserts | —attribute-inserts
将数据转储为带有显式列名(INSERT INTO table (column, …) VALUES …)的INSERT命令。 这会使恢复非常缓慢。 它主要用于制作可以装入非基于PostgreSQL的数据库的转储。 同样,由于此选项为每一行生成一个单独的命令,因此在重新加载行时发生错误只会导致该行丢失,而不是整个表内容丢失。
--disable-dollar-quoting
此选项禁止对函数体使用美元引号,并强制使用SQL标准字符串语法对其进行引用。
--disable-triggers
仅当创建仅数据转储时,此选项才相关。 它指示pg_dumpall包含一些命令,以在重新加载数据时临时禁用目标表上的触发器。 如果不想在数据重装期间调用的表上有触发器,请使用此选项。 为--disable-triggers发出的命令必须以超级用户身份执行。 因此,您还应该使用-S指定超级用户名,或者最好小心地以超级用户身份启动生成的脚本。 此选项仅对纯文本格式有意义。 对于归档格式,可以在调用pg_restore时指定该选项。
Note: Greenplum数据库不支持用户定义的触发器。
--inserts
将数据转储为INSERT命令(而不是COPY)。 这会使恢复非常缓慢。 它主要用于制作可以装入非基于PostgreSQL的数据库的转储。 但是,由于此选项为每一行生成一个单独的命令,因此在重新加载行时发生错误只会导致该行丢失,而不是整个表内容丢失。 请注意,如果您重新排列了列顺序,则还原可能会完全失败。 --column-inserts选项可以安全地防止列顺序更改,尽管速度更慢。
--lock-wait-timeout=timeout
不要在转储开始时一直等待获取共享表锁。 相反,如果无法在指定的timeout时间内锁定表,则失败。 可以使用SET statement_timeout接受的任何格式指定超时。 允许的值因要从中转储的服务器版本而异,但所有Greenplum数据库版本均接受整数毫秒。
--no-security-labels
不要转储安全标签。
--no-tablespaces
不输出命令以选择表空间。 使用此选项,将在还原期间的默认表空间中创建所有对象。
--no-unlogged-table-data
不要转储未记录表的内容。 此选项对是否转储表定义(模式)没有影响。 它仅禁止转储表数据。 从备用服务器转储时,始终排除未记录表中的数据。
--quote-all-identifiers
强制给所有标识符加上引号。 当从Greenplum数据库主版本不同于pg_dumpall的中转储数据库时, 或者打算将输出加载到其他主版本的服务器中时,建议使用此选项。 默认情况下,pg_dumpall仅为在其主版本中为保留字的标识符加引号。 在处理其他版本的保留字可能略有不同的服务器时,有时会导致兼容性问题。 使用--quote-all-identifiers可以防止此类问题,但代价是难以阅读的转储脚本。
--resource-queues
转储资源队列定义。
--resource-groups
转储资源组定义。
--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语句中输出表分配子句。
-? | —help
显示有关pg_dumpall命令行参数的帮助,然后退出。
连接选项
-d connstr | —dbname=connstr
指定用于连接到服务器的参数,作为连接字符串。 有关更多信息,请参见PostgreSQL文档中的连接字符串。
为了与其他客户端应用程序保持一致,该选项称为--dbname, 但是由于pg_dumpall需要连接到许多数据库,因此连接字符串中的数据库名称将被忽略。 使用-l选项可指定用于转储全局对象并发现应转储其他数据库的数据库的名称。
-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 | —no-password
不发出密码提示。 如果服务器要求密码验证,而其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。 此选项在没有用户输入密码的批处理作业和脚本中很有用。
-W | —password
强制输入密码提示。
--role=rolename
指定用于创建转储的角色名称。 此选项使pg_dumpall在连接到数据库后发出SET ROLE rolename命令。 当通过身份验证的用户(由-U指定)缺少pg_dumpall所需的特权,但可以切换到具有所需权限的角色时,此功能很有用。 某些安装有禁止直接以超级用户身份登录的策略,并且使用此选项可以在不违反策略的情况下进行转储。
注解
由于pg_dumpall在内部调用pg_dump, 因此某些诊断消息将引用pg_dump。
恢复后,明智的做法是在每个数据库上运行ANALYZE,以便查询优化器可以得到有用的统计信息。 您也可以运行vacuumdb -a -z分析所有数据库。
pg_dumpall要求所有需要的表空间目录在还原之前都存在。 否则,对于非默认位置的数据库,数据库创建将失败。
示例
转储所有数据库:
pg_dumpall > db.out
要从此文件重新加载数据库,可以使用:
psql template1 -f db.out
仅转储全局对象(包括资源队列):
pg_dumpall -g --resource-queues