pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pg_dump — Extract a Postgres database into a script file or other archive file
pg_dump [[-a] | [-s]] [-b] [-c] [-C] [[-d] | [-D]] [-f file] [-F format] [-i] [[-n] | [-N]] [-o] [-O] [-R] [-S] [-t table] [-v] [-x] [-Z 0...9] [-h host] [-p port] [-u] dbname
pg_dump 是一个把 Postgres 数据库转储为包含查询命令的脚本或归档文件的工具。脚本文件为文本格式,可用于重建数据库,甚至是在其他机器和其他架构上。归档文件是 7.1 版新引入的,包含足够的信息供 pg_restore 重建数据库,而且还允许 pg_restore 有选择地恢复部分内容,甚至在恢复之前对条目重新排序。归档文件的设计也使其可以跨架构移植。
pg_dump 会产生重新生成所有用户定义类型、函数、表、索引、聚合和操作符所需的查询。此外,所有数据都以文本格式复制出来,因此既可以方便地重新复制进去,也可以导入编辑工具。
pg_dump 可用于转储数据库的内容,以便从一个 Postgres 安装迁移到另一个安装。运行 pg_dump 之后,应当检查输出中是否有任何警告,尤其是考虑到下面列出的限制。
与某种备选文件格式结合并配合 pg_restore 使用时,它提供了一种灵活的归档和传输机制。可以用 pg_dump 备份整个数据库,然后用 pg_restore 检查归档和/或选择要恢复数据库的哪些部分。细节见 pg_restore 文档。
pg_dump 接受下列命令行参数。(长选项形式只在某些平台上可用。)
dbname指定要抽取的数据库名称。
只转储数据,不转储模式(定义)。
转储数据和 BLOB 数据。
转储在创建模式(的命令)之前先清除(删除)该模式的命令。
对纯文本(脚本)输出,包含创建数据库本身的命令。
将数据转储为正规的 INSERT 命令(而不是 COPY)。这会使恢复变得非常缓慢。
将数据转储为带有显式列名的 INSERT 命令。这会使恢复变得非常缓慢。
filefile把输出发送到指定的文件。
formatformat格式可以是下列之一:
输出纯文本 SQL 脚本文件(默认)
输出一个适合输入到 pg_restore 的 tar 归档。使用这种归档格式,允许在恢复数据库时重新排序和/或排除模式元素,还可以限制恢复时重新装载哪些数据。
输出一个适合输入到 pg_restore 的自定义归档。这是最灵活的格式,因为它既允许重新排序模式元素,也允许重新排序数据装载。这种格式默认还会压缩。
忽略 pg_dump 与数据库服务器之间的版本不匹配。由于 pg_dump 对系统目录了解甚多,任何给定版本的 pg_dump 都只打算与相应版本的数据库服务器一起使用。如果你需要忽略版本检查,可以使用此选项(如果 pg_dump 因此而失败,可别怪没警告过你)。
除非绝对必要,抑制标识符周围的双引号。如果标识符中使用了保留字,这可能导致装载这份转储数据时出问题。这是 pg_dump 6.4 之前版本的默认行为。
在标识符周围包含双引号。这是默认行为。
为每个表转储对象标识符(OID)。
在纯文本输出模式下,不把对象所有权设置成与原始数据库一致。通常,pg_dump 会发出(psql 特有的)\connect 语句来设置模式元素的所有权。
在纯文本输出模式下,禁止 pg_dump 发出任何 \connect 语句。
只转储模式(定义),不转储数据。
usernameusername指定在禁用触发器和/或设置模式元素所有权时要使用的超级用户名。
tabletable只转储 table 的数据。
指定详细模式。
不转储 ACL(grant/revoke 命令)和表所有权信息。
0..90..9指定在支持压缩的归档格式中所用的压缩级别(目前只有自定义归档格式支持压缩)。
pg_dump 还接受下列用于连接参数的命令行参数:
hosthost指定运行 postmaster 的机器的主机名。如果 host 以斜杠开头,则将其用作 Unix 域套接字的目录。
portport指定 postmaster 正在监听连接的 Internet TCP/IP 端口,或本地 Unix 域套接字文件扩展名。端口号默认为 5432,或 PGPORT 环境变量的值(如果已设置)。
使用密码认证。提示输入 username 和 password。
Connection to database 'template1' failed.
connectDBStart() -- connect() failed: No such file or directory
Is the postmaster running locally
and accepting connections on Unix socket '/tmp/.s.PGSQL.5432'?
pg_dump 无法连接到指定主机和端口上的 postmaster 进程。如果你看到这条消息,请确保 postmaster 运行在正确的主机上,并且你指定了正确的端口。
dumpSequence(table): SELECT failed
你没有读取该数据库的权限。请联系你的 Postgres 站点管理员。
pg_dump 内部执行 SELECT 语句。如果在运行 pg_dump 时遇到问题,请确保你能够使用例如 psql 从数据库中选择信息。
pg_dump 有一些限制。这些限制大多源于难以从系统目录中抽取某些元信息。
在转储单个表或以纯文本转储时,pg_dump 不处理大对象。必须使用某种二进制归档格式对大对象进行完整转储。
在进行只转储数据的转储时,pg_dump 会在插入数据之前发出禁用用户表上触发器的查询,并在数据插入完成后发出重新启用它们的查询。如果恢复在中途中止,系统目录可能会处于错误状态。
要转储一个数据库:
$pg_dump mydb > db.out
要重新装载这个数据库:
$psql -d database -f db.out
要把一个包含 BLOB 的名为 mydb 的数据库转储到一个 tar 文件:
$pg_dump -Ft -b mydb > db.tar
要把这个数据库(连同 BLOB)重新装载到一个已存在的名为 newdb 的数据库:
$pg_restore -d newdb db.tar
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。