# 皮克_倾倒
皮克_dump — 将 PostgreSQL 数据库提取到脚本文件或其他存档文件中
# 概要
pg_dump
[连接选项
...][option
...] [数据库名称
]
# 描述
皮克_dump 是一个用于备份 PostgreSQL 数据库的实用程序。即使同时使用数据库,它也会进行一致的备份。皮克_dump 不会阻止其他用户访问数据库(读取器或写入器)。
皮克_dump 只转储一个数据库。要备份整个集群,或备份集群中所有数据库共有的全局对象(例如角色和表空间),请使用皮克_饺子.
转储可以脚本或存档文件格式输出。脚本转储是纯文本文件,其中包含将数据库重建到保存时的状态所需的 SQL 命令。要从这样的脚本中恢复,请将其提供给psql.即使在其他机器和其他架构上,脚本文件也可用于重建数据库;进行了一些修改,即使在其他 SQL 数据库产品上也是如此。
替代存档文件格式必须与皮克_恢复重建数据库。他们允许 pg_restore 以选择性地选择要恢复的内容,甚至在恢复之前重新排序项目。存档文件格式旨在跨架构移植。
当与其中一种存档文件格式一起使用并与 pg 结合使用时_恢复,pg_dump 提供了灵活的归档和传输机制。皮克_dump 可以用来备份整个数据库,然后 pg_restore 可用于检查存档和/或选择要恢复的数据库的哪些部分。最灵活的输出文件格式是“自定义”格式(-Fc
)和“目录”格式(-Fd
)。它们允许对所有归档项目进行选择和重新排序,支持并行恢复,并且默认压缩。“目录”格式是唯一支持并行转储的格式。
运行 pg 时_转储,应该检查任何警告的输出(打印在标准错误上),特别是考虑到下面列出的限制。
# 选项
以下命令行选项控制输出的内容和格式。
数据库名称
指定要转储的数据库的名称。如果未指定,则环境变量PG数据库
用来。如果未设置,则使用为连接指定的用户名。
-一种
--仅数据
只转储数据,而不是模式(数据定义)。表数据、大对象和序列值被转储。
此选项类似于,但由于历史原因不完全相同,指定--section=数据
.
-b
--blob
在转储中包含大型对象。这是默认行为,除非--模式
,- 桌子
, 或者--schema-only
被指定。这-b
因此,switch 仅用于将大型对象添加到已请求特定模式或表的转储中。请注意,blob 被视为数据,因此将包含在--仅数据
被使用,但不是什么时候--schema-only
是。
-B
--无斑点
排除转储中的大对象。
当两个-b
和-B
给出,行为是输出大对象,当数据被转储时,见-b
文档。
-c
- 干净的
在输出用于创建数据库对象的命令之前,输出命令以清理(删除)数据库对象。(除非--如果存在
如果目标数据库中不存在任何对象,restore 可能会生成一些无害的错误消息。)
发出存档(非文本)输出文件时忽略此选项。对于存档格式,您可以在调用时指定选项pg_restore
.
-C
- 创造
使用命令开始输出以创建数据库本身并重新连接到创建的数据库。(使用这种形式的脚本,在运行脚本之前连接到目标安装中的哪个数据库并不重要。)如果- 干净的
也指定,脚本在重新连接到它之前删除并重新创建目标数据库。
和- 创造
,输出还包括数据库的注释(如果有),以及特定于该数据库的任何配置变量设置,即任何更改数据库...设置...
和改变角色...在数据库中...设置...
提及此数据库的命令。数据库本身的访问权限也被转储,除非--no-acl
被指定。
发出存档(非文本)输出文件时忽略此选项。对于存档格式,您可以在调用时指定选项pg_restore
.
-e *
图案*
--扩展=*
图案*
仅转储匹配的扩展名*图案
.未指定此选项时,将转储目标数据库中的所有非系统扩展。可以通过写多个来选择多个扩展-e
开关。这图案
*根据 psql 使用的相同规则将参数解释为模式\d
命令(见模式),因此也可以通过在模式中写入通配符来选择多个扩展名。使用通配符时,如果需要,请小心引用该模式,以防止 shell 扩展通配符。
任何注册的配置关系pg_extension_config_dump
如果其扩展名由指定,则包含在转储中- 延期
.
# 笔记
什么时候-e
已指定,pg_dump 不会尝试转储所选扩展可能依赖的任何其他数据库对象。因此,不能保证特定扩展转储的结果可以自行成功恢复到干净的数据库中。
-E *
编码*
--编码=*
编码*
以指定的字符集编码创建转储。默认情况下,转储是在数据库编码中创建的。(获得相同结果的另一种方法是设置PGC客户端编码
环境变量到所需的转储编码。)支持的编码在第 24.3.1 节.
-f *
文件*
--文件=*
文件*
将输出发送到指定文件。对于基于文件的输出格式,可以省略此参数,在这种情况下使用标准输出。但是,必须为目录输出格式提供它,它指定目标目录而不是文件。在这种情况下,目录由pg_dump
并且以前不能存在。
-F *
格式*
--格式=*
格式*
选择输出的格式。*格式
*可以是以下之一:
p
清楚的
输出纯文本 SQL 脚本文件(默认)。
c
风俗
输出适合输入到 pg 的自定义格式存档_恢复。与目录输出格式一起,这是最灵活的输出格式,因为它允许在还原期间手动选择和重新排序存档项目。默认情况下,此格式也是压缩的。
d
目录
输出适合输入到 pg 的目录格式存档_恢复。这将为每个表和要转储的 blob 创建一个目录,以及一个所谓的目录文件,以机器可读的格式描述转储的对象,pg_恢复可以读取。可以使用标准 Unix 工具操作目录格式存档;例如,可以使用 gzip 工具压缩未压缩存档中的文件。这种格式默认是压缩的,也支持并行转储。
吨
柏油
输出一个柏油
-format 归档适合输入到 pg_恢复。tar 格式与目录格式兼容:提取 tar 格式存档会生成有效的目录格式存档。但是,tar 格式不支持压缩。此外,当使用 tar 格式时,表数据项的相对顺序在恢复期间不能更改。
-j *
njobs*
--工作=*
njobs*
通过转储并行运行转储*njobs
*表同时。此选项可能会减少执行转储所需的时间,但也会增加数据库服务器的负载。您只能将此选项与目录输出格式一起使用,因为这是多个进程可以同时写入其数据的唯一输出格式。
皮克_转储将打开*njobs
*+ 1 个与数据库的连接,因此请确保您的最大限度_连接设置足够高以容纳所有连接。
在运行并行转储时请求数据库对象的排他锁可能会导致转储失败。原因是pg_转储领导进程请求工作进程稍后将转储的对象上的共享锁,以确保没有人删除它们并使它们在转储运行时消失。如果另一个客户端随后请求一个表的排他锁,该锁将不会被授予,而是将排队等待领导进程的共享锁被释放。因此,任何其他对该表的访问也不会被授予,并且将在排他锁请求之后排队。这包括试图转储表的工作进程。如果没有任何预防措施,这将是典型的僵局情况。为了检测这个冲突,pg_转储工作进程使用现在等待
选项。如果工作进程没有被授予这个共享锁,那么其他人肯定在此期间请求了一个独占锁,并且没有办法继续转储,所以 pg_转储别无选择,只能中止转储。
对于一致的备份,数据库服务器需要支持同步快照,这是在 PostgreSQL 9.2 中引入的用于主服务器和 10 用于备用服务器的功能。使用此功能,即使使用不同的连接,数据库客户端也可以确保他们看到相同的数据集。pg_dump -j
使用多个数据库连接;它使用领导进程连接到数据库一次,然后再次连接到每个工作人员作业。如果没有同步快照功能,则无法保证不同的工作作业在每个连接中看到相同的数据,这可能会导致备份不一致。
如果要运行 9.2 之前的服务器的并行转储,则需要确保从领导者连接到数据库到最后一个工作作业连接到数据库之间,数据库内容不会发生变化。最简单的方法是在开始备份之前停止任何访问数据库的数据修改进程(DDL 和 DML)。您还需要指定--no-synchronized-snapshots
运行时的参数pg_dump -j
针对 9.2 之前的 PostgreSQL 服务器。
-n *
图案*
--schema=*
图案*
仅转储匹配的模式*图案
;这将选择模式本身及其所有包含的对象。如果未指定此选项,则将转储目标数据库中的所有非系统模式。可以通过编写多个来选择多个模式-n
开关。这图案
*根据 psql 使用的相同规则将参数解释为模式\d
命令(见模式下面),因此也可以通过在模式中写入通配符来选择多个模式。使用通配符时,如果需要,请小心引用模式,以防止 shell 扩展通配符;看例子以下。
# 笔记
什么时候-n
已指定,pg_dump 不会尝试转储所选模式可能依赖的任何其他数据库对象。因此,无法保证特定模式转储的结果可以自行成功恢复到干净的数据库中。
# 笔记
非模式对象(如 blob)在-n
被指定。您可以使用--blob
转变。
-N *
图案*
--排除模式=*
图案*
不要转储任何匹配的模式*图案
*.该模式是根据相同的规则解释为-n
.-N
可以多次给出以排除与多个模式中的任何一个匹配的模式。
当两个-n
和-N
给出,行为是只转储匹配至少一个的模式-n
切换但没有-N
开关。如果-N
没有出现-n
,然后模式匹配-N
被排除在正常转储之外。
-O
--no-owner
不要输出命令来设置对象的所有权以匹配原始数据库。默认情况下,pg_转储问题改变所有者
或者设置会话授权
语句来设置创建的数据库对象的所有权。当脚本运行时,这些语句将失败,除非它是由超级用户(或拥有脚本中所有对象的同一用户)启动的。要创建一个可以由任何用户恢复的脚本,但会给该用户所有对象的所有权,请指定-O
.
发出存档(非文本)输出文件时忽略此选项。对于存档格式,您可以在调用时指定选项pg_restore
.
-R
--no-reconnect
此选项已过时,但仍被接受以实现向后兼容性。
-s
--schema-only
仅转储对象定义(模式),而不转储数据。
此选项与--仅数据
.它类似于,但由于历史原因不完全相同,指定--section=pre-data --section=后数据
.
(不要将此与--模式
选项,它以不同的含义使用“模式”这个词。)
要仅排除数据库中一部分表的表数据,请参阅--排除表数据
.
-S *
用户名*
--超级用户=*
用户名*
指定禁用触发器时要使用的超级用户用户名。仅当--禁用触发器
用来。(通常,最好将其省略,而是以超级用户身份启动生成的脚本。)
-t *
图案*
--表=*
图案*
仅转储名称匹配的表*图案
.可以通过写多个来选择多个表-t
开关。这图案
*根据 psql 使用的相同规则将参数解释为模式\d
命令(见模式下面),因此也可以通过在模式中写入通配符来选择多个表。使用通配符时,如果需要,请小心引用模式,以防止 shell 扩展通配符;看例子以下。
除了表之外,此选项还可用于转储匹配视图、物化视图、外部表和序列的定义。它不会转储视图或物化视图的内容,只有在指定对应的外部服务器时才会转储外部表的内容--include-foreign-data
.
这-n
和-N
开关没有效果时-t
被使用,因为选择的表-t
无论这些开关如何,都将被转储,并且不会转储非表对象。
# 笔记
什么时候-t
已指定,pg_dump 不会尝试转储所选表可能依赖的任何其他数据库对象。因此,无法保证特定表转储的结果可以自行成功恢复到干净的数据库中。
-T *
图案*
--排除表=*
图案*
不要转储任何匹配的表*图案
*.该模式是根据相同的规则解释为-t
.-T
可以多次给出以排除匹配多个模式中的任何一个的表。
当两个-t
和-T
给出,行为是只转储匹配至少一个的表-t
切换但没有-T
开关。如果-T
没有出现-t
, 然后表匹配-T
被排除在正常转储之外。
-v
--详细
指定详细模式。这将导致 pg_dump 将详细的对象注释和开始/停止时间输出到转储文件,并将进度消息输出到标准错误。重复该选项会导致额外的调试级别消息出现在标准错误上。
-V
- 版本
打印 pg_转储版本并退出。
-x
--无特权
--no-acl
防止转储访问权限(授予/撤销命令)。
-Z *
0..9*
--压缩=*
0..9*
指定要使用的压缩级别。零表示没有压缩。对于自定义和目录归档格式,这指定了单个表数据段的压缩,默认为中等压缩级别。对于纯文本输出,设置非零压缩级别会导致整个输出文件被压缩,就好像它是通过 gzip 输入的一样;但默认是不压缩的。tar 归档格式目前根本不支持压缩。
--二进制升级
此选项供就地升级实用程序使用。不推荐或不支持将其用于其他目的。该选项的行为可能会在未来的版本中更改,恕不另行通知。
--列插入
--attribute-inserts
将数据转储为插入
具有显式列名的命令 (插入 *
桌子* (*
柱子*, ...) 价值观 ...
)。这将使恢复非常缓慢;它主要用于制作可以加载到非 PostgreSQL 数据库的转储。重新加载期间的任何错误都只会导致属于问题的行插入
要丢失,而不是整个表的内容。
--禁用美元报价
此选项禁用对函数体使用美元引用,并强制使用 SQL 标准字符串语法对它们进行引用。
--禁用触发器
此选项仅在创建仅数据转储时相关。它指示 pg_dump 以包含在重新加载数据时临时禁用目标表上的触发器的命令。如果您不想在数据重新加载期间调用的表上有参照完整性检查或其他触发器,请使用此选项。
目前,发出的命令--禁用触发器
必须以超级用户身份完成。因此,您还应该指定一个超级用户名-S
,或者最好小心以超级用户身份启动生成的脚本。
发出存档(非文本)输出文件时忽略此选项。对于存档格式,您可以在调用时指定选项pg_restore
.
--启用行安全
仅当转储具有行安全性的表的内容时,此选项才相关。默认情况下,pg_转储将设置排_安全关闭,以确保从表中转储所有数据。如果用户没有足够的权限绕过行安全,则会引发错误。该参数指示 pg_转储设置排_安全改为 on,允许用户转储他们有权访问的表的部分内容。
请注意,如果您当前使用此选项,您可能还希望转储位于插入
格式,作为复制自
在还原期间不支持行安全性。
--排除表数据=*
图案*
不要转储任何匹配的表的数据*图案
*.该模式是根据相同的规则解释为-t
.--排除表数据
可以多次给出以排除匹配多个模式中的任何一个的表。当您需要定义特定表(即使您不需要其中的数据)时,此选项很有用。
要排除数据库中所有表的数据,请参阅--schema-only
.
--extra-float-digits=*
ndigits*
使用指定的值extra_float_digits
转储浮点数据时,而不是最大可用精度。出于备份目的进行的例行转储不应使用此选项。
--如果存在
使用条件命令(例如,添加一个如果存在
子句)在清理数据库对象时。此选项无效,除非- 干净的
也被指定。
--include-foreign-data=*
外国服务器*
转储与外部服务器匹配的任何外部表的数据*外国服务器
图案。可以通过写多个来选择多个国外服务器--include-foreign-data
开关。此外,该外国服务器
*根据 psql 使用的相同规则将参数解释为模式\d
命令(见模式下面),因此也可以通过在模式中写入通配符来选择多个外国服务器。使用通配符时,如果需要,请小心引用模式,以防止 shell 扩展通配符;看例子以下。唯一的例外是不允许使用空模式。
# 笔记
什么时候--include-foreign-data
已指定,pg_dump 不检查外部表是否可写。因此,不能保证外部表转储的结果可以成功恢复。
--插入
将数据转储为插入
命令(而不是复制
)。这将使恢复非常缓慢;它主要用于制作可以加载到非 PostgreSQL 数据库的转储。重新加载期间的任何错误都只会导致属于问题的行插入
要丢失,而不是整个表的内容。请注意,如果您重新排列了列顺序,还原可能会完全失败。这--列插入
选项对列顺序更改是安全的,尽管速度更慢。
--load-via-partition-root
为表分区转储数据时,使复制
要么插入
语句以包含它的分区层次结构的根为目标,而不是分区本身。这会导致在加载数据时为每一行重新确定适当的分区。当在服务器上重新加载数据时,这可能很有用,其中行并不总是像在原始服务器上那样落入相同的分区中。例如,如果分区列是文本类型并且两个系统对用于对分区列进行排序的排序规则的定义不同,则可能会发生这种情况。
从使用此选项创建的存档恢复时最好不要使用并行性,因为 pg_restore 不会确切知道给定存档数据项会将数据加载到哪个分区。由于并行作业之间的锁定冲突,这可能导致效率低下,甚至可能由于在加载所有相关数据之前设置外键约束而导致重新加载失败。
--lock-wait-timeout=*
超时*
不要永远等待在转储开始时获取共享表锁。如果无法在指定范围内锁定表,则会失败*超时
*.超时可以以任何接受的格式指定SET statement_timeout
.(允许的格式因您要转储的服务器版本而异,但所有版本都接受整数毫秒数。)
- 暂无评论
不要转储评论。
--无出版物
不要转储出版物。
--无安全标签
不要转储安全标签。
--无订阅
不要转储订阅。
--不同步
默认,pg_dump
将等待所有文件安全地写入磁盘。此选项导致pg_dump
无需等待即可返回,这更快,但意味着随后的操作系统崩溃可能会使转储损坏。通常,此选项对测试很有用,但不应在从生产安装转储数据时使用。
--no-synchronized-snapshots
此选项允许运行pg_dump -j
针对 9.2 之前的服务器,请参阅-j
参数以获取更多详细信息。
--无表空间
不要输出命令来选择表空间。使用此选项,所有对象都将在还原期间的默认表空间中创建。
发出存档(非文本)输出文件时忽略此选项。对于存档格式,您可以在调用时指定选项pg_restore
.
--no-toast-compression
不要输出命令来设置 TOAST 压缩方法。使用此选项,将使用默认压缩设置恢复所有列。
--no-unlogged-table-data
不要转储未记录表的内容。此选项对是否转储表定义(模式)没有影响;它只抑制转储表数据。从备用服务器转储时,始终排除未记录表中的数据。
--on-conflict-do-nothing
添加在冲突中什么都不做
到插入
命令。此选项无效,除非--插入
,--列插入
要么--rows-per-insert
也被指定。
--quote-all-identifiers
强制引用所有标识符。从 PostgreSQL 主版本与 pg 不同的服务器转储数据库时,建议使用此选项_转储,或者当输出打算加载到不同主要版本的服务器中时。默认情况下,pg_dump 仅引用在其自己的主要版本中作为保留字的标识符。这有时会在处理其他版本的服务器时导致兼容性问题,这些服务器的保留字集可能略有不同。使用--quote-all-identifiers
以难以阅读的转储脚本为代价来防止此类问题。
--rows-per-insert=*
行*
将数据转储为插入
命令(而不是复制
)。控制每次的最大行数插入
命令。指定的值必须是大于零的数字。重新加载期间的任何错误都只会导致属于问题的行插入
要丢失,而不是整个表的内容。
--节=*
节名*
只转储指定的部分。部分名称可以是前数据
,数据
, 要么发布数据
.可以多次指定此选项以选择多个部分。默认是转储所有部分。
数据部分包含实际的表数据、大对象内容和序列值。后数据项包括索引、触发器、规则和约束的定义,而不是经过验证的检查约束。前数据项包括所有其他数据定义项。
--serializable-deferable
用一个可序列化
转储事务,确保使用的快照与以后的数据库状态一致;但是通过等待事务流中不存在异常的点来执行此操作,这样就不存在转储失败或导致其他事务回滚的风险序列化失败
.看第 13 章有关事务隔离和并发控制的更多信息。
此选项对于仅用于灾难恢复的转储没有好处。当原始数据库继续更新时,用于加载数据库副本以进行报告或其他只读负载共享的转储可能很有用。没有它,转储可能反映的状态与最终提交的事务的任何串行执行不一致。例如,如果使用批处理技术,批处理可能会在转储中显示为已关闭,而批处理中的所有项目都不会出现。
如果在 pg 时没有活动的读写事务,此选项将没有区别_转储开始。如果读写事务处于活动状态,则转储的开始可能会延迟不确定的时间长度。一旦运行,无论有没有开关,性能都是一样的。
--快照=*
快照名称*
转储数据库时使用指定的同步快照(请参阅表 9.90更多细节)。
当需要将转储与逻辑复制槽同步时,此选项很有用(请参阅第 49 章) 或并发会话。
在并行转储的情况下,将使用此选项定义的快照名称,而不是获取新快照。
--严格名称
要求每个扩展名 (-e
/- 延期
), 架构 (-n
/--模式
) 和表 (-t
/- 桌子
) 限定符匹配要转储的数据库中的至少一个扩展/模式/表。请注意,如果没有扩展/模式/表限定符找到匹配项,则 pg_即使没有转储也会产生错误--严格名称
.
该选项对-N
/--排除模式
,-T
/--排除表
, 或者--排除表数据
.无法匹配任何对象的排除模式不被视为错误。
--use-set-session-authorization
输出 SQL 标准设置会话授权
命令而不是改变所有者
命令来确定对象的所有权。这使转储更符合标准,但根据转储中对象的历史记录,可能无法正确恢复。此外,转储使用设置会话授权
当然需要超级用户权限才能正确恢复,而改变所有者
需要较少的权限。
-?
- 帮助
显示关于 pg 的帮助_转储命令行参数,然后退出。
以下命令行选项控制数据库连接参数。
-d *
数据库名称*
--dbname=*
数据库名称*
指定要连接的数据库的名称。这相当于指定*数据库名称
作为命令行上的第一个非选项参数。这数据库名称
*可以是一个连接字符串.如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。
-h *
主持人*
--主机=*
主持人*
指定运行服务器的机器的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自PGHOST
环境变量,如果设置,则尝试 Unix 域套接字连接。
-p *
港口*
--端口=*
港口*
指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为PGPORT
环境变量(如果设置)或编译的默认值。
-U *
用户名*
--用户名=*
用户名*
要连接的用户名。
-w
--无密码
永远不要发出密码提示。如果服务器需要密码验证,而密码无法通过其他方式获得,例如.pgpass
文件,连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中很有用。
-W
- 密码
强制 pg_dump 在连接到数据库之前提示输入密码。
这个选项从来都不是必需的,因为 pg_如果服务器要求密码验证,dump 会自动提示输入密码。然而,pg_dump 将浪费一次连接尝试,发现服务器需要密码。在某些情况下,值得输入-W
以避免额外的连接尝试。
--角色=*
角色名*
指定用于创建转储的角色名称。此选项导致 pg_转储发出设定角色
*角色名
*连接数据库后的命令。当经过身份验证的用户(由-U
) 缺少 pg 所需的权限_转储,但可以切换到具有所需权限的角色。某些安装具有禁止直接以超级用户身份登录的策略,使用此选项允许在不违反策略的情况下进行转储。
# 环境
PG数据库
PGHOST
选项
PGPORT
PG用户
默认连接参数。
PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为总是
,汽车
和绝不
.
与大多数其他 PostgreSQL 实用程序一样,此实用程序也使用 libpq 支持的环境变量(请参阅第 34.15 节)。
# 诊断
皮克_dump 内部执行选择
陈述。如果您在运行 pg 时遇到问题_转储,确保您能够从数据库中选择信息,例如,psql.此外,libpq 前端库使用的任何默认连接设置和环境变量都将适用。
pg的数据库活动_转储通常由统计信息收集器收集。如果这是不希望的,您可以设置参数track_counts
假通过选项
或者更改用户
命令。
# 笔记
如果您的数据库集群有任何本地添加到模板1
数据库,注意恢复pg的输出_转储到一个真正空的数据库中;否则,由于添加的对象的重复定义,您可能会遇到错误。要创建一个没有任何本地添加的空数据库,请从模板0
不是模板1
, 例如:
CREATE DATABASE foo WITH TEMPLATE template0;
When a data-only dump is chosen and the option--禁用触发器
被使用,pg_dump 在插入数据之前发出命令以禁用用户表上的触发器,然后在插入数据后发出命令以重新启用它们。如果还原在中间停止,系统目录可能会处于错误状态。
pg生成的转储文件_dump 不包含优化器用于制定查询计划决策的统计信息。因此,明智的做法是运行分析
从转储文件恢复以确保最佳性能后;看第 25.1.3 节和第 25.1.6 节了解更多信息。
因为 pg_dump 用于将数据传输到较新版本的 PostgreSQL,pg 的输出_预计转储会加载到比 pg 更新的 PostgreSQL 服务器版本中_转储的版本。皮克_dump 也可以从比它自己的版本更旧的 PostgreSQL 服务器转储。(目前,支持回到 8.0 版的服务器。)但是,pg_转储不能从比它自己的主要版本更新的 PostgreSQL 服务器转储;它甚至会拒绝尝试,而不是冒险进行无效转储。此外,不能保证 pg_转储的输出可以加载到旧主要版本的服务器中——即使转储是从该版本的服务器获取的。将转储文件加载到旧服务器中可能需要手动编辑转储文件以删除旧服务器不理解的语法。的使用--quote-all-identifiers
建议在跨版本的情况下使用该选项,因为它可以防止不同 PostgreSQL 版本中不同的保留字列表引起的问题。
转储逻辑复制订阅时,pg_转储将生成创建订阅
使用的命令连接 = 假
选项,以便恢复订阅不会为创建复制槽或初始表副本建立远程连接。这样,无需对远程服务器进行网络访问即可恢复转储。然后由用户以合适的方式重新激活订阅。如果涉及的主机已更改,则可能必须更改连接信息。在启动新的完整表副本之前截断目标表也可能是合适的。
# 例子
转储一个名为数据库
到 SQL 脚本文件中:
$ pg_dump mydb > db.sql
将这样的脚本重新加载到名为(新创建的)数据库中新数据库
:
$ psql -d newdb -f db.sql
要将数据库转储到自定义格式的存档文件中:
$ pg_dump -Fc mydb > db.dump
要将数据库转储到目录格式存档中:
$ pg_dump -Fd mydb -f dumpdir
要与 5 个工作作业并行将数据库转储到目录格式存档中:
$ pg_dump -Fd mydb -j 5 -f dumpdir
将存档文件重新加载到名为(新创建的)数据库中新数据库
:
$ pg_restore -d newdb db.dump
要将存档文件重新加载到转储它的同一数据库中,丢弃该数据库的当前内容:
$ pg_restore -d postgres --clean --create db.dump
转储一个名为我的标签
:
$ pg_dump -t mytab mydb > db.sql
转储名称以开头的所有表雇员
在里面底特律
模式,除了名为的表员工日志
:
$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
转储名称以开头的所有模式东
或者西方
并以gsm
,不包括名称中包含单词的任何模式测试
:
$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
同样,使用正则表达式表示法来合并开关:
$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
转储除名称以开头的表之外的所有数据库对象ts_
:
$ pg_dump -T 'ts_*' mydb > db.sql
在中指定大写或混合大小写的名称-t
和相关的开关,你需要用双引号引起来;否则它将被折叠成小写(见模式以下)。但是双引号对 shell 来说是特殊的,所以反过来它们必须被引用。因此,要转储具有混合大小写名称的单个表,您需要类似
$ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql