pg_dump

Name

pg_dump — 将一个Postgres数据库抽出到一个脚本文件 或者其它的归档文件中

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 数据库输出到一个包含查询命令的脚本或者归档文件的工具. 脚本文件是文本格式并且可以用于重建数据库,甚至可 以在其他机器或其他硬件体系上. 在 v7.1 里面新出现的归档文件包含用于 重建数据库的足够的信息,而且还允许 pg_restore选择恢复什么, 或者甚至于在恢复前重新排列条目.归档文件也应该能够在不同体系之间移植.

pg_dump 将输出用于重建所有用户定义的类型,函数,表, 索引聚集和操作符所必须的查询语句.另外, 所有数据是用文本格式拷贝出来的,因而也可以很容易地拷贝回去, 也很容易用工具编辑.

pg_dump 在从 Postgres 节点向另一个节点一个转移数据时很有用.在运行 pg_dump, 后,我们应该检查输出脚本中的任何警告,尤其是下面列出的限制.

如果一种候选文件格式和 pg_restore 结合,那么它就能提供一种灵活的归档和传输机制. pg_dump 可以用于备份整个数据库, 然后就可以使用 pg_restore 检查 这个归档和/或选择要恢复的数据库部分. 参阅 文档获取细节.

选项

pg_dump接受下面的命令行参数: (长选项形式只有在一些平台上可以使用.)

dbname

声明将要抽取的数据库名.

-a, --data-only

只输出数据,不输出结构(表定义).

-b, --blobs

倾倒数据和 BLOB 数据.

-c, --clean

倾倒出来的脚本在运行大纲(结构)创建命令之前先运行清理(删除) 该大纲的命令.

-C, --create

对于纯文本(脚本)输出而言,包括创建数据库本身的 SQL.

-d, --inserts

将数据输出为合适的INSERT命令 (而不是 COPY). 这样会导致恢复非常缓慢.

-D, --attribute-inserts

把数据倾倒为带有明确字段名的 INSERT 命令. 这样会导致恢复非常缓慢.

-f file, --file=file

把输出发往指定的文件.

-F format, --format=format

(输出)格式可以是下列之一:

p

输出纯文本SQL脚本文件(缺省)

t

输出适合输入到 pg_restore 里的tar归档文件. 使用这个归档允许在恢复数据库时重新排序和/或把表结构排除在外. 同时也可能可以在恢复的时候限制对哪些数据进行恢复.

c

输出适于给 pg_restore 用的客户化归档. 这是最灵活的格式,它允许对装载的数据和纲要元素进行重新排列. 这个格式缺省的时候是压缩的.

-i, --ignore-version

忽略在 pg_dump 和数据库服务器之间的版本差别. 因为 pg_dump知道许多关于系统表的信息, 任何给定版本的 pg_dump 只能和对应的数据库服务器版本一并使用. 如果你需要跨越版本检查时才使用这个选项( 而且如 pg_dump 失效,别说我没警告你).

-n, --no-quotes

除非绝对必需,禁止标识周围的双引号.如果有保留字用于标识符, 这么做有可能在装载输出的数据时导致麻烦.这是 v6.4以前的 pg_dump 缺省特性。

-N, --quotes

在标识周围包括双引号。这是缺省。

-o, --oids

为每个表都输出对象标识(OID).

-O, --no-owner

在纯文本输出模式下,不把对象的所有权设置为对应源数据库. 通常, pg_dump 发出 (psql特有的) \connect 语句以设置纲要元素的所有权.

-R, --no-reconnect

在纯文本输出模式下,禁止 pg_dump 发出任何 \connect 语句.

-s, --schema-only

只输出表纲要(定义),不输出数据.

-S username, --superuser=username

声明当关闭触发器和/或设置结构元素所有权的时候用的超级用户名称.

-t table, --table=table

只输出表 table的数据.

-v, --verbose

声明冗余模式

-x, --no-acl

避免输出 ACL(赋予/撤消 命令)和表的所有者关系信息.

-Z 0..9, --compress=0..9

声明在那些支持压缩的格式中使用的压缩级别. (目前只有客户化格式支持压缩).

pg_dump 同样接受下面的命令行参数作为联接参数:

-h host, --host=host

声明运行 postmaster 的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个 IP 联接. 如果主机名以斜扛开头,则它被用做到 Unix 域套接字的路径.

-p port, --port=port

声明 postmaster 正在侦听并等待联接的TCP/IP 端口或本地 Unix 主控套接字文件句柄. 缺省的端口号是5432,或者环境变量 PGPORT 的值(如果存在).

-u

使用口令认证,提示输入 usernamepassword

诊断

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 mydb > db.out

重载这个数据库∶

$ psql -d database -f db.out

输出一个叫 mydb 的包含BLOB 的数据库到一个 tar 文件:

$ pg_dump -Ft -b mydb > db.tar

把这个数据库(连同BLOB) 一起恢复到一个现有的叫 newdb 的数据库:

$ pg_restore -d newdb db.tar

又见

, , , PostgreSQL 管理员手册