# 皮克_饺子
皮克_dumpall — 将 PostgreSQL 数据库集群提取到脚本文件中
# 概要
pg_dumpall
[连接选项
...][option
...]
# 描述
皮克_dumpall 是一种实用程序,用于将集群的所有 PostgreSQL 数据库写入(“转储”)到一个脚本文件中。脚本文件包含可用作输入的 SQL 命令psql恢复数据库。它通过调用皮克_倾倒对于集群中的每个数据库。皮克_dumpall 还转储所有数据库共有的全局对象,即数据库角色和表空间。(第_dump 不会保存这些对象。)
自 pg_dumpall 从您很可能必须以数据库超级用户身份连接的所有数据库中读取表,以便生成完整的转储。此外,您将需要超级用户权限才能执行保存的脚本,以便允许添加角色和创建数据库。
SQL 脚本将被写入标准输出。使用-f
/- 文件
选项或 shell 运算符将其重定向到文件中。
皮克_dumpall 需要多次连接到 PostgreSQL 服务器(每个数据库一次)。如果您使用密码身份验证,它将每次都要求输入密码。有一个很方便~/.pgpass
在这种情况下归档。看第 34.16 节了解更多信息。
# 选项
以下命令行选项控制输出的内容和格式。
-一种
--仅数据
只转储数据,而不是模式(数据定义)。
-c
- 干净的
包括 SQL 命令以在重新创建数据库之前清理(删除)数据库。降低
还添加了角色和表空间的命令。
-E *
编码*
--编码=*
编码*
以指定的字符集编码创建转储。默认情况下,转储是在数据库编码中创建的。(获得相同结果的另一种方法是设置PGC客户端编码
环境变量到所需的转储编码。)
-f *
文件名*
--文件=*
文件名*
将输出发送到指定文件。如果省略,则使用标准输出。
-g
--globals-only
只转储全局对象(角色和表空间),不转储数据库。
-O
--no-owner
不要输出命令来设置对象的所有权以匹配原始数据库。默认情况下,pg_转储问题改变所有者
或者设置会话授权
语句来设置创建的模式元素的所有权。当脚本运行时,这些语句将失败,除非它是由超级用户(或拥有脚本中所有对象的同一用户)启动的。要创建一个可以由任何用户恢复的脚本,但会给该用户所有对象的所有权,请指定-O
.
-r
--roles-only
只转储角色,不转储数据库或表空间。
-s
--schema-only
仅转储对象定义(模式),而不转储数据。
-S *
用户名*
--超级用户=*
用户名*
指定禁用触发器时要使用的超级用户用户名。仅当--禁用触发器
用来。(通常,最好将其省略,而是以超级用户身份启动生成的脚本。)
-t
--tablespaces-only
只转储表空间,不转储数据库或角色。
-v
--详细
指定详细模式。这将导致 pg_dumpall 将开始/停止时间输出到转储文件,并将进度消息输出到标准错误。重复该选项会导致额外的调试级别消息出现在标准错误上。该选项也传递给 pg_倾倒。
-V
- 版本
打印 pg_dumpall 版本并退出。
-x
--无特权
--no-acl
防止转储访问权限(授予/撤销命令)。
--二进制升级
此选项供就地升级实用程序使用。不推荐或不支持将其用于其他目的。该选项的行为可能会在未来的版本中更改,恕不另行通知。
--列插入
--attribute-inserts
将数据转储为插入
具有显式列名的命令 (插入 *
桌子* (*
柱子*, ...) 价值观 ...
)。这将使恢复非常缓慢;它主要用于制作可以加载到非 PostgreSQL 数据库的转储。
--禁用美元报价
此选项禁用对函数体使用美元引用,并强制使用 SQL 标准字符串语法对它们进行引用。
--禁用触发器
此选项仅在创建仅数据转储时相关。它指示 pg_dumpall 包含在重新加载数据时临时禁用目标表上的触发器的命令。如果您不想在数据重新加载期间调用的表上有参照完整性检查或其他触发器,请使用此选项。
目前,发出的命令--禁用触发器
必须以超级用户身份完成。因此,您还应该指定一个超级用户名-S
,或者最好小心以超级用户身份启动生成的脚本。
--排除数据库=*
图案*
不要转储名称匹配的数据库*图案
.可以通过编写多个排除多个模式--排除-数据库
开关。这图案
*根据 psql 使用的相同规则将参数解释为模式\d
命令(见模式下面),因此也可以通过在模式中写入通配符来排除多个数据库。使用通配符时,如果需要,请小心引用模式以防止 shell 通配符扩展。
--extra-float-digits=*
ndigits*
使用 extra 的指定值_漂浮_转储浮点数据时的位数,而不是最大可用精度。出于备份目的进行的例行转储不应使用此选项。
--如果存在
使用条件命令(例如,添加一个如果存在
子句)删除数据库和其他对象。此选项无效,除非- 干净的
也被指定。
--插入
将数据转储为插入
命令(而不是复制
)。这将使恢复非常缓慢;它主要用于制作可以加载到非 PostgreSQL 数据库的转储。请注意,如果您重新排列了列顺序,还原可能会完全失败。这--列插入
选项更安全,尽管速度更慢。
--load-via-partition-root
为表分区转储数据时,使复制
要么插入
语句以包含它的分区层次结构的根为目标,而不是分区本身。这会导致在加载数据时为每一行重新确定适当的分区。当在服务器上重新加载数据时,这可能很有用,其中行并不总是像在原始服务器上那样落入相同的分区中。例如,如果分区列是文本类型并且两个系统对用于对分区列进行排序的排序规则的定义不同,则可能会发生这种情况。
--lock-wait-timeout=*
暂停*
不要永远等待在转储开始时获取共享表锁。相反,如果无法在指定范围内锁定表,则失败*暂停
*.超时可以以任何接受的格式指定SET statement_timeout
.
- 暂无评论
不要转储评论。
--无出版物
不要转储出版物。
--no-role-passwords
不要转储角色的密码。恢复后,角色将有一个空密码,并且在设置密码之前,密码身份验证将始终失败。由于指定此选项时不需要密码值,因此从目录视图中读取角色信息pg_roles
代替pg_authid
.因此,如果访问pg_authid
受某些安全策略的限制。
--无安全标签
不要转储安全标签。
--无订阅
不要转储订阅。
--不同步
默认,pg_dumpall
将等待所有文件安全地写入磁盘。此选项导致pg_dumpall
无需等待即可返回,这更快,但意味着随后的操作系统崩溃可能会使转储损坏。通常,此选项对测试很有用,但不应在从生产安装转储数据时使用。
--无表空间
不要输出创建表空间的命令,也不要为对象选择表空间。使用此选项,所有对象都将在还原期间的默认表空间中创建。
--no-toast-compression
不要输出命令来设置 TOAST 压缩方法。使用此选项,将使用默认压缩设置恢复所有列。
--no-unlogged-table-data
不要转储未记录表的内容。此选项对是否转储表定义(模式)没有影响;它只抑制转储表数据。
--on-conflict-do-nothing
添加在冲突中什么都不做
到插入
命令。此选项无效,除非--插入
要么--列插入
也被指定。
--quote-all-identifiers
强制引用所有标识符。从 PostgreSQL 主版本与 pg 不同的服务器转储数据库时,建议使用此选项_dumpall 的,或者当输出打算加载到不同主要版本的服务器时。默认情况下,pg_dumpall 仅引用在其自己的主要版本中作为保留字的标识符。这有时会在处理其他版本的服务器时导致兼容性问题,这些服务器的保留字集可能略有不同。使用--quote-all-identifiers
以难以阅读的转储脚本为代价来防止此类问题。
--rows-per-insert=*
行*
将数据转储为插入
命令(而不是复制
)。控制每次的最大行数插入
命令。指定的值必须是大于零的数字。重新加载期间的任何错误都只会导致属于问题的行插入
要丢失,而不是整个表的内容。
--use-set-session-authorization
输出 SQL 标准设置会话授权
命令而不是改变所有者
命令来确定对象的所有权。这使转储更符合标准,但根据转储中对象的历史记录,可能无法正确恢复。
-?
- 帮助
显示关于 pg 的帮助_dumpall 命令行参数,然后退出。
以下命令行选项控制数据库连接参数。
-d *
connstr*
--dbname=*
connstr*
指定用于连接到服务器的参数,作为连接字符串;这些将覆盖任何冲突的命令行选项。
该选项被称为--dbname
为了与其他客户端应用程序保持一致,但因为 pg_dumpall 需要连接多个数据库,连接字符串中的数据库名称将被忽略。使用-l
用于指定用于初始连接的数据库名称的选项,它将转储全局对象并发现应转储的其他数据库。
-h *
主持人*
--主机=*
主持人*
指定运行数据库服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自PGHOST
环境变量,如果设置,则尝试 Unix 域套接字连接。
-l *
数据库名称*
--数据库=*
数据库名称*
指定要连接到的数据库的名称,以便转储全局对象并发现应转储的其他数据库。如果未指定,则postgres
将使用数据库,如果不存在,模板1
将会被使用。
-p *
港口*
--端口=*
港口*
指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为PGPORT
环境变量(如果设置)或编译的默认值。
-U *
用户名*
--用户名=*
用户名*
要连接的用户名。
-w
--无密码
永远不要发出密码提示。如果服务器需要密码验证,而密码无法通过其他方式获得,例如.pgpass
文件,连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。
-W
- 密码
强制 pg_dumpall 在连接到数据库之前提示输入密码。
这个选项从来都不是必需的,因为 pg_如果服务器要求密码验证,dumpall 将自动提示输入密码。然而,pg_dumpall 将浪费一次连接尝试,发现服务器需要密码。在某些情况下,值得输入-W
以避免额外的连接尝试。
请注意,对于要转储的每个数据库,都会再次出现密码提示。通常,最好设置一个~/.pgpass
文件而不是依靠手动密码输入。
--角色=*
角色名*
指定用于创建转储的角色名称。此选项导致 pg_dumpall 发出一个设定角色
*角色名
*连接数据库后的命令。当经过身份验证的用户(由-U
) 缺少 pg 所需的权限_dumpall,但可以切换到具有所需权限的角色。某些安装具有禁止直接以超级用户身份登录的策略,使用此选项允许在不违反策略的情况下进行转储。
# 环境
PGHOST
选项
PGPORT
PG用户
默认连接参数
PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为总是
,汽车
和绝不
.
与大多数其他 PostgreSQL 实用程序一样,此实用程序也使用 libpq 支持的环境变量(请参阅第 34.15 节)。
# 笔记
自 pg_dumpall 调用 pg_内部转储,一些诊断消息将引用 pg_倾倒。
这- 干净的
即使您打算将转储脚本恢复到新的集群中,该选项也很有用。用于- 干净的
授权脚本删除并重新创建内置postgres
和模板1
数据库,确保这些数据库将保留它们在源集群中的相同属性(例如,语言环境和编码)。如果没有该选项,这些数据库将保留其现有的数据库级属性以及任何预先存在的内容。
恢复后,明智的做法是运行分析
在每个数据库上,以便优化器具有有用的统计信息。你也可以运行真空数据库 -a -z
分析所有数据库。
不应期望转储脚本完全无错误地运行。特别是因为脚本会发出创建角色
对于源集群中存在的每个角色,引导超级用户肯定会收到“角色已存在”错误,除非目标集群使用不同的引导超级用户名初始化。这个错误是无害的,应该被忽略。的使用- 干净的
选项可能会产生关于不存在对象的额外无害错误消息,尽管您可以通过添加来最小化这些错误消息--如果存在
.
皮克_dumpall 要求在还原之前存在所有需要的表空间目录;否则,对于非默认位置的数据库,数据库创建将失败。
# 例子
转储所有数据库:
$ pg_dumpall > db.out
要从此文件重新加载数据库,您可以使用:
$ psql -f db.out postgres
在这里连接哪个数据库并不重要,因为 pg 创建的脚本文件_dumpall 将包含适当的命令来创建和连接到保存的数据库。一个例外是,如果您指定- 干净的
,您必须连接到postgres
最初的数据库;该脚本将尝试立即删除其他数据库,并且对于您连接的数据库将失败。
# 也可以看看
查看皮克_倾倒有关可能的错误情况的详细信息。