PHP实战中知识总结 / PgSQL - pg_dumpall(bin目录文件)
一、pg_dumpall
pg_dumpall工具可以一个集簇中所有的PostgreSQL数据库转储到一个脚本文件。该脚本文件包含可以用作psql的输入SQL命令来恢复数据库。它会对集簇中的每个数据库调用pg_dump。
pg_dumpall还转储对所有数据库公用的全局对象(pg_dump不保存这些对象),也就是说数据库角色和表空间都会被转储。
二、命令格式
pg_dumpall [OPTION]...
1、General options
参数 | 说明 |
---|
-f, --file=FILENAME | 指定导出到指定文件的文件名 |
-v, --verbose | 指定详情模式。这将导致pg_dumpall向标准错误输出详细的对象注释以及转储文件的开始/停止时间,还有进度消息 |
-V, --version | 打印版本 |
--lock-wait-timeout=TIMEOUT | 在转储的开始从不等待共享表锁的获得。而是在指定的timeout内不能锁定一个表时失败。超时时长可以用SET statement_timeout接受的任何格式指定 |
-?, --help | 显示帮助信息并退出 |
2、Options controlling the output content
参数 | 说明 |
---|
-a, --data-only | 只转储数据,不转储模式(数据定义) |
-c, --clean | 包括在重建数据库之前清除(移除)它们的 SQL 命令。角色和表空间的DROP命令也会被加入进来 |
-E, --encoding=ENCODING | 以指定的字符集编码创建转储。在默认情况下,该转储会以该数据库的编码创建 |
-g, --globals-only | 只转储全局对象(角色和表空间),而不转储数据库 |
-O, --no-owner | 默认情况下,pg_dumpall发出ALTER OWNER或SET SESSION AUTHORIZATION语句来设置被创建的模式元素的所有权。除非脚本是由一个超级用户(或者是拥有脚本中所有对象的同一个用户)所运行,这些语句在脚本运行时会失败。要使得一个脚本能被任意用户恢复,但又不想给予该用户所有对象的所有权,可以指定-O |
-r, --roles-only | 只转储角色,不转储数据库和表空间 |
-s, --schema-only | 只转储对象定义(模式),不转储数据。 |
-S, --superuser=NAME | 指定要在禁用触发器时使用的超级用户的用户名。只有使用--disable-triggers时,这个选项才有效 |
-t, --tablespaces-only | 只转储表空间,不转储数据库和角色 |
-x, --no-privileges | 不转储权限命令(grant/revoke) |
--binary-upgrade | 这个选项仅用于升级功能 |
--column-inserts | 该选项为表数据每一行生成具有列名的INSERT命令,当数据库恢复时遇到一行错误时,它只会导致错误的这一行数据丢失,而不是全部数据。 |
--disable-dollar-quoting | 这个选项禁止在函数体中使用美元符号引用,并且强制它们使用 SQL 标准字符串语法被引用 |
--disable-triggers | 只有在只转储数据时,这个选项才有效。它指示pg_dumpall包括在数据被重新载入时能够临时禁用目标表上的触发器的命令。如果你在表上有引用完整性检查或其他触发器,并且你在数据重新载入期间不想调用它们,请使用这个选项。 |
--exclude-database=PATTERN | 不转储名字与*pattern*匹配的数据库。可以通过编写多个--exclude-database开关来排除多个模式 |
--extra-float-digits=NUM | 在转储浮点数据时使用extra_float_digits规定的值,而不是最大可用精度 |
--if-exists | 在转储的语句中增加一个IF EXISTS子句来清除数据库和其他对象。 只有同时指定了--clean时,这个选项才可用 |
--inserts | 将数据转储为INSERT命令(而不是COPY) |
--load-via-partition-root | 在为一个分区表转储数据时,让COPY语句或者INSERT语句将根表作为目标,在数据被装载时,会为每一个行重新确定合适的分区 |
--no-comments | 不转储注释 |
--no-publications | 不转储publication |
--no-role-passwords | 不为角色转储口令。在恢复完后,角色的口令将是空口令,并且在设置口令之前口令认证都不会成功。由于指定这个选项时并不需要口令值,角色信息将从目录视图pg_roles而不是pg_authid中读出。因此,如果对pg_authid的访问被某条安全性策略所限制,那么这个选项也会有所帮助。 |
--no-security-labels | 不转储安全标签 |
--no-subscriptions | 不转储subscription |
--no-sync | 默认情况下,pg_dumpall将等待所有文件被安全地写入到磁盘。这个选项会让pg_dumpall不做这种等待而返回,这样会更快,但是意味着后续的操作系统崩溃可能留下被损坏的转储 |
--no-tablespaces | 不转储表空间,通过这个选项,在恢复期间所有的对象都会被创建在任何作为默认的表空间中 |
--no-unlogged-table-data | 不转储未标记的表数据 |
--on-conflict-do-nothing | 添加ON CONFLICT DO NOTHING到INSERT命令。 除非--inserts或--column-inserts也被设置,否则此选项不生效。 |
--quote-all-identifiers | 强制引用所有标识符。默认情况下,pg_dumpall只会对为其主版本中保留词的标识符加上引号。在与其他版本的具有不同保留词集合的服务器交互时,这有时会导致兼容性问题。使用--quote-all-identifiers可以阻止这类问题,但是代价是转储脚本会更加难读。 |
--rows-per-insert=NROWS | 将数据转储为INSERT命令(而不是COPY)。控制每个INSERT命令的最大行数。 指定的值必须是大于零的数。重新加载期间的任何错误都将导致仅丢失有问题的INSERT的行,而不是整个表内容。 |
--use-set-session-authorization | 输出 SQL-标准的SET SESSION AUTHORIZATION命令取代ALTER OWNER命令来确定对象的所有关系。这让该转储更加兼容标准,但是取决于该转储中对象的历史,该转储可能无法正常恢复。而且,一个使用SET SESSION AUTHORIZATION的转储将一定会要求超级用户特权来正确地恢复,而ALTER OWNER要求更少的特权 |
3、Connection options
参数 | 说明 |
---|
-d, --dbname=CONNSTR | 指定用于连接到服务器的参数,比如连接字符串 |
-h, --host=HOSTNAME | 指定服务器正在运行的机器的主机名 |
-l, --database=DBNAME | 指定要连接到哪个数据库转储全局对象以及发现要转储哪些其他数据库。如果没有指定,将会使用postgres数据库,如果postgres不存在,就使用template1。 |
-p, --port=PORT | 指定端口 |
-U, --username=NAME | 指定用户连接 |
-w, --no-password | 不提示输入密码 |
-W, --password | 强制提示密码输入 |
--role=ROLENAME | 指定一个用来创建该转储的角色名。这个选项导致pg_dump在连接到数据库后发出一个set role rolename命令 |