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接受下面的命令行参数: (长选项形式只有在一些平台上可以使用.)
声明将要抽取的数据库名.
只输出数据,不输出结构(表定义).
倾倒数据和 BLOB 数据.
倾倒出来的脚本在运行大纲(结构)创建命令之前先运行清理(删除) 该大纲的命令.
对于纯文本(脚本)输出而言,包括创建数据库本身的 SQL.
将数据输出为合适的INSERT命令 (而不是 COPY). 这样会导致恢复非常缓慢.
把数据倾倒为带有明确字段名的 INSERT 命令. 这样会导致恢复非常缓慢.
把输出发往指定的文件.
(输出)格式可以是下列之一:
输出纯文本SQL脚本文件(缺省)
输出适合输入到 pg_restore 里的tar归档文件. 使用这个归档允许在恢复数据库时重新排序和/或把表结构排除在外. 同时也可能可以在恢复的时候限制对哪些数据进行恢复.
输出适于给 pg_restore 用的客户化归档. 这是最灵活的格式,它允许对装载的数据和纲要元素进行重新排列. 这个格式缺省的时候是压缩的.
忽略在 pg_dump 和数据库服务器之间的版本差别. 因为 pg_dump知道许多关于系统表的信息, 任何给定版本的 pg_dump 只能和对应的数据库服务器版本一并使用. 如果你需要跨越版本检查时才使用这个选项( 而且如 pg_dump 失效,别说我没警告你).
除非绝对必需,禁止标识周围的双引号.如果有保留字用于标识符, 这么做有可能在装载输出的数据时导致麻烦.这是 v6.4以前的 pg_dump 缺省特性。
在标识周围包括双引号。这是缺省。
为每个表都输出对象标识(OID).
在纯文本输出模式下,不把对象的所有权设置为对应源数据库. 通常, pg_dump 发出 (psql特有的) \connect 语句以设置纲要元素的所有权.
在纯文本输出模式下,禁止 pg_dump 发出任何 \connect 语句.
只输出表纲要(定义),不输出数据.
声明当关闭触发器和/或设置结构元素所有权的时候用的超级用户名称.
只输出表 table的数据.
声明冗余模式
避免输出 ACL(赋予/撤消 命令)和表的所有者关系信息.
声明在那些支持压缩的格式中使用的压缩级别. (目前只有客户化格式支持压缩).
pg_dump 同样接受下面的命令行参数作为联接参数:
声明运行 postmaster 的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个 IP 联接. 如果主机名以斜扛开头,则它被用做到 Unix 域套接字的路径.
声明 postmaster 正在侦听并等待联接的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 正在给定的主机上你所声明的端口上运行.
注意: pg_dump 在内部使用 SELECT 语句.如果你运行 pg_dump 时碰到问题,确认你能够使用象 psql 这样的程序从数据 库选择.
pg_dump 有几个限制. 限制大多是源于从系统表中抽取某些元信息的困难.
在倾倒一个表或者作为纯文本倾倒时,pg_dump 无法操作 大对象.大对象必须整体地使用二进制归档格式中的一种进行倾倒.
在进行纯数据倾倒时,pg_dump 发出一些查询先关闭在用户 表上面的触发器,然后插入数据,数据插入完成后再发出查询打开触发器. 如果恢复动作在中间停止,那么系统表可能就会处于一种错误状态.