pg_dump
pg_dump — 将一个 PostgreSQL 数据库转储为脚本文件或其他归档文件
大纲
pg_dump [connection-option...] [option...] [dbname]
描述
pg_dump 是一个用于备份 PostgreSQL 数据库的工具。即使数据库正在被并发使用,它也能生成一致的备份。pg_dump 不会阻塞其他用户访问数据库(无论读还是写)。
pg_dump 只转储单个数据库。要备份整个集簇,或者备份一个集簇中所有数据库共有的全局对象(如角色和表空间),请使用 pg_dumpall。
转储可以输出为脚本格式或归档文件格式。脚本转储是纯文本文件,包含把数据库重建到保存时状态所需的 SQL 命令。要从这样的脚本恢复,只需将其交给 psql。脚本文件甚至可以在其他机器和其他体系结构上用于重建数据库;经过一些修改后,甚至也可以用于其他 SQL 数据库产品。
另一类归档文件格式必须结合 pg_restore 来重建数据库。它们允许 pg_restore 有选择地恢复某些内容,甚至在恢复之前重新排列条目。归档文件格式被设计为可跨体系结构移植。
使用归档文件格式并配合 pg_restore 时,pg_dump 提供了一种灵活的归档和传输机制。pg_dump 可用于备份整个数据库,而
pg_restore 可用于检查归档和/或选择要恢复的数据库部分。最灵活的输出文件格式是“custom”格式(-Fc)和“directory”格式(-Fd)。它们允许选择和重新排序所有归档条目,支持并行恢复,并且默认会压缩。只有“directory”格式支持并行转储。
运行 pg_dump 时,应检查输出中是否有任何警告(打印到标准错误),尤其要结合下面列出的限制来查看。
选项
以下命令行选项控制输出的内容和格式。
dbname指定要转储的数据库名称。如果未指定,则使用环境变量
PGDATABASE。如果未设置该变量,则使用连接指定的用户名。-a--data-only只转储数据,不转储模式(数据定义)。会转储表数据、大对象和序列值。
此选项类似于指定
--section=data,但出于历史原因,两者并不完全相同。-b--blobs在转储中包含大对象。除非指定了
--schema、--table或--schema-only,否则这是默认行为。因此,-b开关只在已经请求了特定模式或表的转储中,需要把大对象加回来时才有用。注意,大对象被视为数据,因此在使用--data-only时会包含,在使用--schema-only时则不会包含。-B--no-blobs在转储中排除大对象。
当同时给出
-b和-B时,行为是在转储数据时输出大对象,请参阅-b文档。-c--clean在输出创建这些对象的命令之前,先输出用于
DROP所有被转储数据库对象的命令。当恢复要覆盖现有数据库时,此选项很有用。如果目标数据库中某些对象不存在,则在恢复期间会报告可忽略的错误信息,除非还指定了--if-exists。当生成一个归档(非文本)输出文件时,此选项将被忽略。对于归档格式,可以在调用
pg_restore时指定该选项。-C--create让输出以创建数据库本身并重新连接到新建数据库的命令开始。(使用这种形式的脚本时,在目标安装中先连接到哪个数据库再运行脚本都无关紧要。)如果还指定了
--clean,则脚本会在重新连接到目标数据库之前先删除并重新创建它。使用
--create时,输出还会包含该数据库的注释(如果有),以及该数据库特有的任何配置变量设置,也就是提及该数据库的任何ALTER DATABASE ... SET ...和ALTER ROLE ... IN DATABASE ... SET ...命令。除非指定了--no-acl,否则数据库本身的访问权限也会被转储。当生成一个归档(非文本)输出文件时,此选项将被忽略。对于归档格式,可以在调用
pg_restore时指定该选项。-Eencoding--encoding=encoding在指定的字符集编码中创建转储。默认情况下,转储将以数据库编码创建。(获得相同结果的另一种方法是将
PGCLIENTENCODING环境变量设置为所需的转储编码。)-ffile--file=file将输出发送到指定文件。对于基于文件的输出格式,可以省略此参数,这时使用标准输出。不过,对于目录输出格式,必须给出此参数,因为它指定的是目标目录而不是文件。在这种情况下,该目录由
pg_dump创建,并且在此之前必须不存在。-Fformat--format=format选择输出的格式。
format可以是以下之一:pplain输出纯文本 SQL 脚本文件(默认)。
ccustom输出适合供 pg_restore 使用的 custom 格式归档。与目录输出格式一起,这是最灵活的输出格式,因为它允许在恢复时手工选择并重新排序归档条目。这种格式默认也会压缩。
ddirectory输出适合供 pg_restore 使用的 directory 格式归档。这会创建一个目录,其中每个被转储的表和大对象各有一个文件,外加一个所谓的目录表(Table of Contents)文件,以机器可读格式描述被转储对象,pg_restore 可以读取它。directory 格式归档可以用标准 Unix 工具来操作;例如,未压缩归档中的文件可以使用 gzip 工具进行压缩。该格式默认压缩,并且支持并行转储。
ttar输出
tar格式归档,适合供 pg_restore 使用。tar 格式与 directory 格式兼容:解开一个 tar 格式归档就会得到一个有效的 directory 格式归档。不过,tar 格式不支持压缩。另外,使用 tar 格式时,在恢复过程中不能改变表数据项的相对顺序。
-jnjobs--jobs=njobs以并行方式运行转储,同时转储
njobs个表。此选项减少执行转储所需的时间,但也会增加数据库服务器的负载。只能在目录输出格式下使用此选项,因为只有这种输出格式允许多个进程同时写入数据。pg_dump 将打开
njobs+ 1 个数据库连接,因此请确保 max_connections 设置足够高,能够容纳所有连接。在并行转储运行期间请求数据库对象上的排他锁,可能导致转储失败。原因是 pg_dump 的主进程会对稍后由工作进程转储的对象请求共享锁,以确保在转储运行期间没有人删除这些对象。如果另一个客户端随后请求某个表上的排他锁,该锁不会被授予,而是会排队等待主进程释放共享锁。于是,对该表的任何其他访问也都不会被授予,并会排在该排他锁请求之后,其中包括试图转储该表的工作进程。如果没有任何预防措施,这就会形成一个经典的死锁场景。为检测这种冲突,pg_dump 工作进程会使用
NOWAIT选项再请求一个共享锁。如果工作进程拿不到这个共享锁,就说明这期间已经有人请求了排他锁,而此时已经无法继续转储,因此 pg_dump 只能中止转储。要获得一致的备份,数据库服务器需要支持同步快照。这一特性是在 PostgreSQL 9.2 中为主库引入的,在 10 中为备库引入。有了这个特性,数据库客户端即使使用不同连接,也能保证看到相同的数据集。
pg_dump -j会使用多个数据库连接:它会先由主进程连接数据库一次,然后每个工作任务再各连一次。若没有同步快照特性,就无法保证各个工作任务在各自连接中看到相同的数据,这可能导致备份不一致。如果要对 9.2 之前的服务器执行并行转储,必须确保从主进程连接数据库起,到最后一个工作任务连接数据库为止,数据库内容都不发生变化。最简单的方法是在开始备份之前,暂停所有访问数据库并修改数据的进程(DDL 和 DML)。对 9.2 之前的 PostgreSQL 服务器运行
pg_dump -j时,还必须指定--no-synchronized-snapshots参数。-nschema--schema=schema只转储匹配
schema的模式;这既会选择模式本身,也会选择其中包含的所有对象。未指定此选项时,将转储目标数据库中的所有非系统模式。可以通过写多个-n开关来选择多个模式。schema参数按照 psql 的\d命令所使用的同样规则进行解释(见模式),因此也可以通过在模式中使用通配符来选择多个模式。使用通配符时,如有需要请小心为模式加引号,以防止 shell 展开通配符;见下文的示例。注意
当指定
-n时,pg_dump 不会尝试转储所选模式可能依赖的任何其他数据库对象。因此,不能保证特定模式转储的结果能够单独成功恢复到一个干净的数据库中。注意
指定
-n时,不会转储大对象等非模式对象。可以使用--blobs开关把大对象加回转储中。-Nschema--exclude-schema=schema不转储任何名称匹配
schema的模式。该匹配条件按照与-n相同的规则解释。可以多次指定-N,以排除匹配所给条件中任意一个的模式。当同时给出
-n和-N时,其行为是只转储至少匹配一个-n开关但不匹配任何-N开关的模式。如果出现-N而没有-n,那么匹配-N的模式会从原本的正常转储中排除。-o--oids将对象标识符(OID)作为每个表的数据的一部分进行转储。如果应用程序以某种方式引用 OID 列(例如在外键约束中),请使用此选项。否则,不应使用此选项。
-O--no-owner不输出用于把对象所有权设置成与原始数据库一致的命令。默认情况下,pg_dump 会发出
ALTER OWNER或SET SESSION AUTHORIZATION语句来设置新建数据库对象的所有权。除非脚本由超级用户(或拥有脚本中所有对象的同一用户)启动,否则这些语句会在运行脚本时报错。若要创建一个可由任意用户恢复、并让该用户拥有所有对象的脚本,请指定-O。当生成一个归档(非文本)输出文件时,此选项将被忽略。对于归档格式,可以在调用
pg_restore时指定该选项。-R--no-reconnect这个选项已经过时,但仍然被接受以保持向后兼容性。
-s--schema-only只转储对象定义(模式),不转储数据。
此选项与
--data-only的作用相反。它类似于指定--section=pre-data --section=post-data,但由于历史原因并不完全相同。(不要把它与
--schema选项混淆,后者中的“schema”一词含义不同。)要只排除数据库中某些表的表数据,请参见
--exclude-table-data。-Susername--superuser=username指定在禁用触发器时要使用的超级用户名。这只在使用
--disable-triggers时相关。(通常最好省略它,而是以超级用户身份运行生成的脚本。)-ttable--table=table只转储名称匹配
table的表。这里,“表”包括视图、物化视图、序列和外部表。可以通过写多个-t开关来选择多个表。table参数按照 psql 的\d命令所使用的同样规则进行解释(见模式),因此也可以通过在模式中使用通配符来选择多个表。使用通配符时,如有需要请小心为模式加引号,以防止 shell 展开通配符;见下文的示例。使用
-t时,-n和-N开关没有作用,因为由-t选中的表无论这些开关如何设置都会被转储,而非表对象则不会被转储。注意
当指定
-t时,pg_dump 不会尝试转储所选表可能依赖的任何其他数据库对象。因此,不能保证特定表转储的结果能够单独成功恢复到一个干净的数据库中。注意
-t开关的行为与 8.2 之前的 PostgreSQL 版本并不完全向上兼容。以前,写成-t tab会转储所有名为tab的表,现在则只转储默认搜索路径中可见的那个表。要获得旧行为,可以写成-t '*.tab'。此外,要选择特定模式中的表,必须写成类似-t sch.tab的形式,而不是旧的-n sch -t tab写法。-Ttable--exclude-table=table不转储任何匹配
table的表。该模式按照与-t相同的规则解释。-T可以给出多次,以排除匹配所给模式中任意一个的表。当同时给出
-t和-T时,其行为是只转储至少匹配一个-t开关但不匹配任何-T开关的表。如果出现-T而没有-t,那么匹配-T的表会从原本的正常转储中排除。-v--verbose指定详细模式。这会使 pg_dump 将详细的对象注释、开始/停止时间写入转储文件,并把进度消息写到标准错误。
-V--version打印 pg_dump 的版本并退出。
-x--no-privileges--no-acl不转储访问权限(grant/revoke 命令)。
-Z0..9--compress=0..9指定所用的压缩级别。零表示不压缩。对于自定义格式和目录格式归档,该选项指定对各个表数据段的压缩,默认以适中的级别压缩。对于纯文本输出,设置非零压缩级别会压缩整个输出文件,就像将其传给 gzip 处理一样;但默认不压缩。tar 归档格式目前完全不支持压缩。
--binary-upgrade此选项供就地升级实用程序使用。不建议也不支持将其用于其他目的。该选项的行为可能在未来的版本中更改而不另行通知。
--column-inserts--attribute-inserts将数据转储为带有显式列名的
INSERT命令 (INSERT INTO)。这会使恢复变得非常缓慢;它主要用于生成可装入非 PostgreSQL 数据库的转储文件。不过,由于此选项为每一行生成单独的命令,恢复某一行时出错只会导致该行丢失,而不会导致整个表的内容丢失。table(column, ...) VALUES ...--disable-dollar-quoting此选项禁用对函数体的美元引用,并强制用 SQL 标准字符串语法对它们加引号。
--disable-triggers此选项只在创建仅数据转储时才相关。它指示 pg_dump 在输出中包含一些命令,以便在恢复数据时临时禁用目标表上的触发器。如果这些表上存在不希望在数据恢复期间触发的引用完整性检查或其他触发器,请使用此选项。
目前,为
--disable-triggers输出的这些命令必须由超级用户执行。因此,还应通过-S指定一个超级用户名,或者更好的做法是谨慎地以超级用户身份运行生成的脚本。当生成一个归档(非文本)输出文件时,此选项将被忽略。对于归档格式,可以在调用
pg_restore时指定该选项。--enable-row-security此选项只在转储启用了行安全的表内容时才相关。默认情况下,pg_dump 会将 row_security 设置为 off,以确保把表中的所有数据都转储出来。如果用户没有足够的权限绕过行安全,则会抛出错误。该参数会指示 pg_dump 改为将 row_security 设置为 on,从而允许用户只转储其有权访问的那部分表内容。
请注意,如果当前使用此选项,通常还会希望让转储采用
INSERT格式,因为恢复期间的COPY FROM不支持行安全。--exclude-table-data=table不转储任何匹配
table模式的表的数据。该模式按照与-t相同的规则解释。可以多次指定--exclude-table-data,以排除匹配所给模式中任意一个的表。当需要某个表的定义但不需要其中的数据时,此选项很有用。要排除数据库中所有表的数据,请参阅
--schema-only。--if-exists使用
DROP ... IF EXISTS命令在--clean模式下删除对象。这会抑制原本可能报告的“does not exist”错误信息。除非同时指定了--clean,否则此选项无效。--inserts将数据转储为
INSERT命令(而不是COPY)。这会使恢复变得非常缓慢;它主要用于生成可装载到非 PostgreSQL 数据库的转储。不过,由于此选项为每一行生成单独的命令,恢复某一行时出错只会导致该行丢失,而不会导致整个表的内容丢失。注意,如果重新排列了列顺序,恢复可能会完全失败。--column-inserts选项不受列顺序变化影响,但会更慢。--load-via-partition-root当为表分区转储数据时,让
COPY或INSERT语句以包含该分区的分区层次结构根为目标,而不是以该分区本身为目标。这会导致在加载数据时为每一行重新确定适当的分区。当在另一台服务器上恢复数据,而行并不总是落在与原始服务器相同的分区中时,这可能很有用。例如,如果分区列是 text 类型,而两个系统对用于排序该分区列的排序规则定义不同,就可能发生这种情况。--lock-wait-timeout=timeout在转储开始时,不要无限等待获取共享表锁。如果无法在指定的
timeout内锁定某个表,就让转储失败。超时可以用SET statement_timeout接受的任意格式指定。(允许的格式因被转储源服务器的版本而异,但所有版本都接受以毫秒为单位的整数。)--no-comments不转储注释。
--no-publications不要转储发布。
--no-security-labels不要转储安全标签。
--no-subscriptions不要转储订阅。
--no-sync默认情况下,
pg_dump会等待所有文件都被安全写入磁盘。该选项会使pg_dump立即返回而不等待,这样更快,但意味着随后如果操作系统崩溃,转储可能会损坏。通常,此选项适用于测试,但不应在从生产安装转储数据时使用。--no-synchronized-snapshots此选项允许对 9.2 之前的服务器运行
pg_dump -j,更多详情请参阅-j参数的文档。--no-tablespaces不输出用于选择表空间的命令。使用此选项时,所有对象在恢复时都会创建在当时默认的表空间中。
当生成一个归档(非文本)输出文件时,此选项将被忽略。对于归档格式,可以在调用
pg_restore时指定该选项。--no-unlogged-table-data不转储不记录 WAL 的表的内容。此选项不影响是否转储表定义(模式),只会抑制表数据的转储。从备库转储时,不记录 WAL 的表中的数据始终会被排除。
--quote-all-identifiers强制为所有标识符加引号。当从某个服务器转储数据库,而该服务器的 PostgreSQL 主版本与 pg_dump 不同,或者输出打算装入另一主版本的服务器时,推荐使用此选项。默认情况下,pg_dump 只会为在其自身主版本中属于保留字的标识符加引号。这有时会在处理其他版本服务器时导致兼容性问题,因为这些版本的保留字集合可能略有不同。使用
--quote-all-identifiers可以防止此类问题,但代价是转储脚本更难阅读。--section=sectionname仅转储指定的部分。部分名称可以是
pre-data、data或post-data。可以多次指定此选项以选择多个部分。默认情况下是转储所有部分。data 部分包含实际的表数据、大对象内容和序列值。post-data 部分包含索引、触发器、规则,以及除已验证的检查约束之外的其他约束定义。pre-data 部分包含所有其他数据定义项。
--serializable-deferrable使用
serializable事务来执行转储,以确保所用快照与后续数据库状态一致;但这是通过等待事务流到达一个不会出现异常的时点来实现的,从而避免转储失败或导致其他事务因serialization_failure而回滚。有关事务隔离和并发控制的更多信息,请参见第 13 章。这个选项对于仅用于灾难恢复的转储没有好处。但对于用来加载数据库副本,以供报表或其他只读负载共享,而原始数据库继续更新的转储,它可能有用。如果不使用它,转储可能反映出一种与最终提交事务的任何串行执行都不一致的状态。例如,如果使用批处理技术,转储中可能显示某个批次已经关闭,但批次中的全部条目却并未出现。
如果在启动 pg_dump 时没有活动的读写事务,此选项不会带来任何差别。如果存在活动的读写事务,转储开始时间可能会被延迟一个不确定的时长。一旦开始运行,使用或不使用该开关的性能都是相同的。
--snapshot=snapshotname在制作数据库转储时,使用指定的同步快照(详见表 9.82)。
当需要将转储与逻辑复制槽(参见第 49 章)或与并发会话同步时,此选项很有用。
在并行转储的情况下,将使用此选项定义的快照名称,而不是重新获取一个新快照。
--strict-names要求每个模式(
-n/--schema)和表(-t/--table)限定条件至少匹配要转储的数据库中的一个模式或表。注意,如果所有模式和表限定条件都找不到匹配项,pg_dump 即使没有使用--strict-names也会报错。此选项不影响
-N/--exclude-schema、-T/--exclude-table或--exclude-table-data。排除模式未匹配到任何对象不会被视为错误。--use-set-session-authorization输出符合 SQL 标准的
SET SESSION AUTHORIZATION命令,而不是ALTER OWNER命令来确定对象所有权。这会让转储更符合标准,但根据转储中对象的历史,可能无法正确恢复。另外,使用SET SESSION AUTHORIZATION的转储肯定需要超级用户权限才能正确恢复,而ALTER OWNER只需较低权限。-?--help显示关于 pg_dump 命令行参数的帮助信息,并退出。
以下命令行选项控制数据库连接参数。
-ddbname--dbname=dbname指定要连接的数据库名称。这等价于在命令行上把
dbname作为第一个非选项参数指定。dbname可以是连接字符串。如果是这样,连接字符串中的参数将覆盖任何冲突的命令行选项。-hhost--host=host指定服务器所在机器的主机名。如果值以斜杠开头,则被用作 Unix 域套接字的目录。默认值取自
PGHOST环境变量(如果已设置),否则尝试使用 Unix 域套接字连接。-pport--port=port指定服务器正在监听连接的 TCP 端口,或本地 Unix 域套接字文件扩展名。默认值取自
PGPORT环境变量(如果已设置),否则使用编译时默认值。-Uusername--username=username用于连接的用户名。
-w--no-password绝不发出密码提示。如果服务器要求密码认证,而又无法通过
.pgpass文件等其他方式获得密码,则连接尝试将失败。在没有用户在场输入密码的批处理作业和脚本中,此选项很有用。-W--password强制 pg_dump 在连接数据库之前提示输入密码。
这个选项绝非必需,因为如果服务器要求密码认证,pg_dump 会自动提示输入密码。不过,pg_dump 会先浪费一次连接尝试来发现服务器需要密码。在某些情况下值得输入
-W,因为可以避免这次额外的连接尝试。--role=rolename指定用于创建转储的角色名称。此选项会让 pg_dump 在连接数据库后发出
SET ROLErolename命令。当经认证用户(由-U指定)缺少 pg_dump 所需权限,但可以切换到具有所需权限的角色时,此选项很有用。有些安装环境有禁止直接以超级用户登录的策略,使用此选项就可以在不违反该策略的情况下进行转储。
环境
PGDATABASEPGHOSTPGOPTIONSPGPORTPGUSER默认连接参数。
与大多数其他 PostgreSQL 工具一样,此工具也使用 libpq 支持的环境变量(见第 34.14 节)。
诊断
pg_dump 在内部执行 SELECT
语句。如果运行 pg_dump 时遇到问题,请确认能够例如使用 psql 从数据库中查询信息。此外,libpq 前端库所使用的任何默认连接设置和环境变量也都会生效。
pg_dump 的数据库活动通常会被统计收集器收集。如果不希望如此,可以将参数 track_counts 通过
PGOPTIONS 或 ALTER USER 命令设置为
false。
注解
如果数据库集簇在 template1 数据库中有任何本地添加的内容,要小心把 pg_dump 的输出恢复到一个真正空的数据库中;否则很可能因为这些新增对象的重复定义而报错。要创建一个不含任何本地添加的空数据库,应从 template0 而不是
template1 复制,例如:
CREATE DATABASE foo WITH TEMPLATE template0;
当选择仅数据转储并使用 --disable-triggers 选项时,pg_dump 会在插入数据前发出命令禁用用户表上的触发器,并在数据插入完成后发出命令重新启用它们。如果恢复在中途停止,系统目录可能会保持在错误状态。
pg_dump 生成的转储文件不包含优化器用于决定查询计划的统计信息。因此,从转储文件恢复后,最好运行 ANALYZE 以确保最佳性能;更多信息请参阅第 24.1.3 节和第 24.1.6 节。
由于 pg_dump 常被用来把数据迁移到更新版本的
PostgreSQL,因此通常可以期望
pg_dump 的输出能够装载到
PostgreSQL 服务器中,而这些服务器的版本比
pg_dump 更高。pg_dump 也可以从版本比它自身更旧的
PostgreSQL 服务器上转储数据。(目前支持回溯到
8.0 版的服务器。)然而,pg_dump 不能从主版本高于它自身的 PostgreSQL 服务器上转储;它甚至会拒绝尝试,以免冒生成无效转储的风险。另外,也不能保证
pg_dump 的输出能够装载到更旧主版本的服务器上
— 即使转储正是从该版本服务器上取得的。把转储文件装载到较旧服务器时,可能需要手工编辑转储文件,移除旧服务器无法理解的语法。在跨版本场景中,建议使用 --quote-all-identifiers 选项,因为它可以防止不同 PostgreSQL 版本保留字列表差异带来的问题。
在转储逻辑复制订阅时,pg_dump 会生成
CREATE SUBSCRIPTION 命令,并带上
connect = false 选项,这样恢复订阅时就不会为了创建复制槽或执行初始表复制而建立远程连接。这样一来,无需网络访问远程服务器也能恢复转储。随后由用户以适当方式重新激活订阅。如果涉及的主机已经变化,则可能需要修改连接信息。在开始一次新的完整表复制之前,可能也适合先截断目标表。
示例
要将名为 mydb 的数据库转储到 SQL 脚本文件中:
$pg_dump mydb > db.sql
要把这样的脚本重新装入一个(新创建的)名为 newdb 的数据库:
$psql -X -d newdb -f db.sql
要把一个数据库转储为 custom 格式归档文件:
$pg_dump -Fc mydb > db.dump
要把一个数据库转储为 directory 格式归档:
$pg_dump -Fd mydb -f dumpdir
要使用 5 个并行工作任务把一个数据库转储为 directory 格式归档:
$pg_dump -Fd mydb -j 5 -f dumpdir
要把一个归档文件重新装入到一个(新创建的)名为
newdb 的数据库:
$pg_restore -d newdb db.dump
要把一个归档文件重新装入生成该归档的同一个数据库,并丢弃该数据库的当前内容:
$pg_restore -d postgres --clean --create db.dump
要转储一个名为 mytab 的表:
$pg_dump -t mytab mydb > db.sql
要转储 detroit 模式中名称以 emp
开头的所有表,但排除名为 employee_log 的表:
$pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
要转储名称以 east 或 west 开头、并且以
gsm 结尾的所有模式,同时排除名称中包含单词
test 的任何模式:
$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