目录
pg_dump是用于备份一种PostgreSQL数据库的工具。即使数据库正在被并发使用,它也能创建一致的备份。pg_dump不阻塞其他用户访问数据库(读取或写入)。
pg_dump只备份单个数据库。要备份一个集簇中 对于所有数据库公共的全局对象(例如角色和表空间),应使用pg_dumpall
转储可以被输出到脚本或归档文件格式。脚本转储是包含 SQL 命令的纯文本文件,它们可以用来重构数据库到它被转储时的状态。要从这样一个脚本恢复,将它喂给psql。脚本文件甚至可以被用来在其他机器和其他架构上重构数据库。在经过一些修改后,甚至可以在其他 SQL 数据库产品上重构数据库。
另一种可选的归档文件格式必须与pg_restore配合使用来重建数据库。它们允许pg_restore能选择恢复什么,或者甚至在恢复之前对条目重排序。归档文件格式被设计为在架构之间可移植。
当使用归档文件格式之一并与pg_restore组合时,pg_dump提供了一种灵活的归档和传输机制。pg_dump可以被用来备份整个数据库,然后pg_restore可以被用来检查归档并/或选择数据库的哪些部分要被恢复。最灵活的输出文件格式是“自定义”格式(-Fc
)和“目录”格式(-Fd
)。它们允许选择和重排序所有已归档项、支持并行恢复并且默认是压缩的。“目录”格式是唯一一种支持并行转储的格式。
- pg_dump [connection-option...] [option...] [dbname]
-
长选项 | 短选项 | 含义 |
--dbname=dbname | -d | 指定要连接到的数据库名。这等效于指定 如果这个参数包含一个 |
| -h host | 指定服务器正在运行的机器的主机名。如果该值开始于一个斜线,它被用作一个 Unix 域套接字的目录。默认是从PGHOST 环境变量中取得(如果被设置),否则将尝试一次 Unix 域套接字连接。 |
--port=port | -p port | 指定服务器正在监听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认是放在 |
| -U username | 要作为哪个用户连接。 |
| -w | 从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass 文件),那么连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。 |
| -W | 强制pg_dump在连接到一个数据库之前提示要求一个口令。 这个选项从来不是必须的,因为如果服务器要求口令认证,pg_dump将自动提示要求一个口令。但是,pg_dump将浪费一次连接尝试来发现服务器想要一个口令。在某些情况下,值得键入 |
| 指定一个用来创建该转储的角色名。这个选项导致pg_dump在连接到数据库后发出一个 |
长选项 | 短选项 | 含义 |
dbname | 指定要被备份的数据库名。如果没有指定,将使用环境变量PGDATABASE 。如果环境变量也没有设置,则使用指定给该连接的用户名。 | |
| -a | 只备份数据,而不备份模式(数据定义)。表数据、大对象和序列值都会被转储。 |
| -b | 在转储中包括大对象。这是当--schema 、--table 或 --schema-only 被指定时的默认行为,因此-b 开关仅对于将大对象添加到已请求特定模式或表的转储中时有用。 请注意,blob被视为数据,因此仅在使用--data-only时才会包含, 但在--schema-only时不会包含。 |
| -B | 排除转储中的大对象。 当给定 |
| -c | 在输出创建数据库对象的命令之前输出清除(删除)它们的命令 (除非也指定了 这个选项只对纯文本格式有意义。对于归档格式,你可以在调用 |
| -C | 使得在输出的开始是一个创建数据库本身并且重新连接到被创建的数据库的命令(通过这种形式的一个脚本,在运行脚本之前你连接的是目标安装中的哪个数据库都没有关系)。如果也指定了 这个选项只对纯文本格式有意义。对于归档格式,你可以在你调用 |
| -E | 以指定的字符集编码创建备份。在默认情况下,该备份会以该数据库的编码创建(另一种得到相同结果的方式是将 |
| -f file | 将输出发送到指定文件。对于基于输出格式的文件这个参数可以被忽略,在那种情况下将使用标准输出。不过对于目录输出格式必须给定这个参数,在目录输出格式中指定的是一个目录而不是一个文件。在这种情况中,该目录会由pg_dump 创建并且不需要以前就存在。 |
| -F format | 选择输出的格式。
输出一个纯文本形式的SQL脚本文件(默认值)。
输出一个适合于作为pg_restore输入的自定义格式归档。和目录输出格式一起,这是最灵活的输出格式,它允许在恢复时手动选择和排序已归档的项。这种格式在默认情况还会被压缩。
输出一个适合作为pg_restore输入的目录格式归档。这将创建一个目录,其中每个被转储的表和大对象都有一个文件,外加一个所谓的目录文件,该文件以一种pg_restore能读取的机器可读格式描述被转储的对象。一个目录格式归档能用标准 Unix 工具操纵,例如一个未压缩归档中的文件可以使用gzip工具压缩。这种格式默认情况下是被压缩的并且也支持并行转储。
输出一个适合于输入到pg_restore中的 |
| -j | 通过同时归档 pg_dump将打开 在运行一次并行转储时请求数据库对象上的排他锁可能导致转储失败。其原因是,pg_dump主控进程会在工作者进程将要稍后转储的对象上请求共享锁,以便确保在转储运行时不会有人删除它们并让它们出错。如果另一个客户端接着请求一个表上的排他锁,那个锁将不会被授予但是会被排入队列等待主控进程的共享锁被释放。因此,任何其他对该表的访问将不会被授予或者将排在排他锁请求之后。这包括尝试转储该表的工作者进程。如果没有任何防范措施,这可能会是一种经典的死锁情况。要检测这种冲突,pg_dump工作者进程使用 对于一个一致的备份,数据库服务器需要支持同步的快照,在PostgreSQL 9.2中引入了一种针对主服务器特性和10个针对备用服务器的特性。有了这种特性,即便数据库客户端使用不同的连接,也可以保证他们看到相同的数据集。 如果你希望运行一个 9.2 之前服务器的并行转储,你需要确保数据库内容从主控进程连接到数据库一直到最后一个工作者任务连接到数据库之间不会改变。做这些最简单的方法是在开始备份之前停止任何访问数据库的数据修改进程(DDL 以及 DML)。当对一个 9.2 之前的PostgreSQL服务器运行 |
| -n schema | 只转储匹配 |
| -N schema | 不转储匹配 当
|
| -o | 备份对象标识符(OID)作为每个表数据的一部分。如果你的应用以某种方式引用OID列(例如在一个外键约束中),应使用这个选项。否则,这个选项不应该被使用。 |
| -O | |
| -R | 这个选项已经废弃,但是为了向后兼容仍然能被接受。 |
| -s | 只转储对象定义(模式),而非数据。 这个选项是 (不要把这个选项和 要为数据库中表的一个子集排除表数据,见 |
| -S username | 指定要在禁用触发器时使用的超级用户的用户名。只有使用 |
| -t | 只转储名字匹配 当 |
| -T | 不转储匹配 当 |
| -v | 指定冗长模式。这将导致pg_dump向标准错误输出详细的对象注释以及转储文件的开始/停止时间,还有进度消息。 |
| -V | pg_dump版本并退出。 |
--no-privileges --no-acl | -x | 防止转储访问特权(授予/收回命令)。 |
--compress=0..9 | -Z 0..9 | 指定要使用的压缩级别。零意味着不压缩。对于自定义归档格式,这会指定个体表数据段的压缩,并且默认是进行中等级别的压缩。对于纯文本输出,设置一个非零压缩级别会导致整个输出文件被压缩,就好像它被gzip处理过一样,但是默认是不压缩。tar 归档格式当前完全不支持压缩。 |
| 这个选项用于就地升级功能。我们不推荐也不支持把它用于其他目的。这个选项在未来的发行中可能被改变而不做通知。 | |
--column-inserts --attribute-inserts | 将数据转储为带有显式列名的INSERT 命令(INSERT INTO )。这将使得恢复过程非常慢,这主要用于使转储能够被载入到非PostgreSQL数据库中。不过,由于这个选项为每一行都产生一个单独的命令,重载一行时的一个错误只会导致那一行被丢失而不是整个表内容丢失。 | |
| 这个选项禁止在函数体中使用美元符号引用,并且强制它们使用 SQL 标准字符串语法被引用。 | |
| 只有在创建一个只转储数据的转储时,这个选项才相关。它指示pg_dump包括在数据被重新载入时能够临时禁用目标表上的触发器的命令。如果你在表上有引用完整性检查或其他触发器,并且你在数据重新载入期间不想调用它们,请使用这个选项。 当前,为 这个选项只对纯文本格式有意义。对于归档格式,你可以在调用 | |
| 只有在转储具有行安全性的表的内容时,这个选项才相关。默认情况下, pg_dump将把 row_security设置为 off 来确保从该表中转储 出所有的数据。如果用户不具有足够能绕过行安全性的特权,那么会抛出 一个错误这个参数指示pg_dump将 row_security设置为 on,允许用户只转储该表中 它们能够访问到的部分内容。 请注意,如果您当前使用此选项,则可能还需要以 | |
| 不转储匹配 要排除数据库中所有表的数据,见 | |
| 时间条件性命令(即增加一个 | |
| 将数据转储为 | |
| 在转储的开始从不等待共享表锁的获得。而是在指定的 | |
| 不转储发布。 | |
| 不转储安全标签。 | |
| 不转储订阅。 | |
| 默认情况下, | |
| 这个选项允许对 9.2 以前的服务器运行 | |
| 不要输出选择表空间的命令。通过这个选项,在恢复期间所有的对象都会被创建在任何作为默认的表空间中。 这个选项只对纯文本格式有意义。对于归档格式,你可以在调用 | |
| 不转储非日志记录表的内容。这个选项对于表定义(模式)是否被转储没有影响,它只会限制转储表数据。当从一个后备服务器转储时,在非日志记录表中的数据总是会被排除。 | |
| 强制引用所有标识符。当从PostgreSQL主版本与pg_dump不同的服务器上转储一个数据库时或者当输出准备载入到一个具有不同主版本的服务器时,推荐使用这个选项。默认情况下,pg_dump只对在其主版本中是被保留词的标识符加上引号。在转储其他版本服务器时,这种默认行为有时会导致兼容性问题,因为那些版本可能具有些许不同的被保留词集合。使用 | |
| 只转储命名节。节的名称可以是 数据节包含真正的表数据、大对象内容和序列值。数据后项包括索引、触发器、规则和除了已验证检查约束之外的约束的定义。数据前项包括所有其他数据定义项。 | |
| 为转储使用一个 对于一个只为灾难恢复存在的转储,这个选项没什么益处。如果一个转储被用来在原始数据库持续被更新期间载入一份用于报表或其他只读负载的数据库拷贝时,这个选项就有所帮助。如果没有这个选项,转储可能会反映一个与最终提交事务的任何执行序列都不一致的状态。例如,如果使用了批处理技术,一个批处理在转储中可以显示为关闭,而其中的所有项都不出现。 如果 pg_dump 被启动时没有读写事务在活动,则这个选项没有什么不同。如果有读写事务在活动,该转储的启动可能会被延迟一段不确定的时间。一旦开始运行,有没有这个开关的表现是相同的。 | |
| 在做一个数据库的转储时指定一个同步的快照(详见 表 9.82)。 在需要把转储和一个逻辑复制槽(见第 48 章) 或者一个并发会话同步时可以用上这个选项。 在并行转储的情况下,将使用这个选项指定的快照名而不是取一个新快照。 | |
| 要求每一个模式( 这个选项对 | |
| 输出 SQL-标准的SET SESSION AUTHORIZATION 命令取代ALTER OWNER 命令来确定对象的所有关系。这让该转储更加兼容标准,但是取决于该转储中对象的历史,该转储可能无法正常恢复。而且,一个使用SET SESSION AUTHORIZATION 的转储将一定会要求超级用户特权来正确地恢复,而ALTER OWNER 要求更少的特权。 | |
--help | -? | 显示有关pg_dump命令行参数的帮助并退出。 |
-
- -Fp 默认是纯文本,备份出来都是可以查看的SQL文本文件
- # 备份库
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W yanhaihang > db_yanhaihang.sql
-
- # 备份schema
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W -n yanhaihang yanhaihang > sch_yanhaihang.sql
-
- # 备份表
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W -t foo yanhaihang > tab_foo.sql
-
-
- -Fc 会压缩 适用于pg_restore 恢复的格式 ,不能用cat 或者 more查看 ,
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W -Fc yanhaihang > db_yanhaihang.dump
-
- # 目录格式
- -Fd 目录格式 适用于pg_restore 恢复的格式 ,
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W -Fd yanhaihang -f db_yanhaihang
-
- # 并行备份
- -j 5 并行备份
- pg_dump -h 127.0.0.1 -p 5432 --role yanhaihang -W -Fd yanhaihang -j 5 -f db_yanhaihang