备份 PostgreSQL 数据有三种完全不同的方法:

1.SQL 转储(类似oracle 的exp,imp, )

2.文件系统级别备份(也就是oracle冷备份。Down掉数据库。然后拷贝data目录下的文件。)

3.在线备份(类似oracle的归档模式下的备份)。

SQL 转储的方法采用的主意是创建一个文本文件,这个文本里面都是 SQL 命令,当把这个文件回馈给服务器时,将重建与转储时状态一

样的数据库。 PostgreSQL 为这个用途提供了应用工具 pg_dump。这条命令的基本用法是:

pg_dump dbname > outfile

pg_dump 是一个普通的 PostgreSQL 客户端应用(尽管是个相当聪明的东西。)这就意味着你可以从任何可以访问该数据库的远端主机上

面进行备份工作。 但是请记住 pg_dump 不会以任何特殊权限运行。具体说来, 就是它必须要有你想备份的表的读权限,因此,实际上你几乎

总是要成为数据库超级用户。

由 pg_dump 创建的备份在内部是一致的, 也就是说,在pg_dump运行的时候对数据库的更新将不会被转储。 pg_dump 工作的时候并不阻

塞其他的对数据库的操作。 (但是会阻塞那些需要排它锁的操作,比如 VACUUM FULL。)

Important: 如果你的数据库结构依赖于 OID (比如说用做外键),那么你必须告诉 pg_dump 把 OID 也倒出来。 要倒 OID,可以使用

-o 命令行选项。 缺省时也不会转储”大对象”。如果你使用大对象,请参考 pg_dump 的命令手册页。

Pg_dump支持备份与恢复形式:

1.Pg_dump 全库导出。

C:\Documents and Settings\Administrator>pg_dump -U postgres  postgres  > c:\fu

lldb.sql

Password:

C:\Documents and Settings\Administrator>pg_dump -U postgres  postgres  > c:\full

db.sql

Password:

2.Pg_dump 单表或者多表导出

C:\Documents and Settings\Administrator>pg_dump  -U postgres  -t test2 -t test1

postgres > c:\test1.sql

3.pg_dump 特殊数据导出:

利用select into语句创建一个临时表,然后使用pg_dump导出临时表。

C:\Documents and Settings\Administrator>pg_dump  -U postgres  -t test_temp postgres > c:\temp.sql

4.Pg_restore 恢复。

To dump a database into a custom-format archive file:

一定要dump成custom格式才能用pg_restore恢复。

C:\Documents and Settings\Administrator>pg_dump -Fc -U postgres -t test -t test1

-t test2 postgres  > c:\test012-1.sql

Password:

C:\Documents and Settings\Administrator>pg_restore -d postgres -U postgres -t te

st1  c:\test012-1.sql

Password:

5.pg_dumpall导出(我把下面翻译一下把,下面说明的很详细了)

pg_dump dumps only a single database at a time, and it does not dump information 
about roles or tablespaces (because those are cluster-wide rather than per-database). 
To support convenient dumping of the entire contents of a database cluster,
the pg_dumpall program is provided. pg_dumpall backs up each database in a given cluster,
and also preserves cluster-wide data such as role and tablespace definitions. 
The basic usage of this command is:

pg_dump 一次只能导出一个数据库。而且不能导出关于角色和表空间信息。(因为表空间和角色跨越单个数据库,属于cluster数据 库的。)pg_dumpall  能够帮你导出cluster数据库的完整内容。也可以单独导出单一数据库,角色和表空间的内容。(由于cluster不 好翻译。可以理解为多数据库。集群,簇数据库,不知道哪个更贴切,就不翻译了)

pg_dumpall > outfile

The resulting dump can be restored with psql: 导出结果能用psql恢复。

psql -f infile postgres

6.Psql  单表或者多表恢复

C:\Documents and Settings\Administrator>psql -d postgres -U postgres -t test1 -f <c:\ff2.sql

所有table,function,view,trigger,type…全部一起出来pg_dump -d dbname -s > sql.txt

pg_dump -d dbname -t tablename -s > sql.txt

pg_dump 名称

pg_dump — 将一个 Postgres 数据库抽出到一个脚本文件

pg_dump [ dbname ]pg_dump [ -h host ] [ -p port ] [ -t table ] [ -a ] [ -c ] [ -d ] [ -D ] [ -n ] [ -N ] [ -o ] [ -s ] [ -u ] [ -v ] [ -x ] [ dbname ]

输入

pg_dump 接受下面的命令行参数:

dbname

声明将要抽取的数据库名.dbname 缺省为 USER 环境变量的值.

-a

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

-c

创建前删除表定义。

-d

将数据输出为合适的插入字串.

-D

将数据作为带字段名的插入语句输出.

-n

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

-N

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

-o

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

-s

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

-t table

只输出表 table 的数据.

-u

使用口令认证.提示输入用户名和口令.

-v

声明冗余模式

-x

包含 ACL(赋予/撤消 命令)和表的所有关系.

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

-h host

声明 postmaster 在运行的机器的主机名.缺省是使用本地Unix主控套接字,而不是一个 IPC 联接.

-p port

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

-u

使用口令认证,提示输入 username 和 password.

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

注意:

pg_dump 有一些限制.限制主要源于从系统表中抽取某些变化信息的困难性.

pg_dump 不能理解部分索引.原因与上面所述相同;部分索引谓词都作为规划存储.( predicates are stored as plans.)

pg_dump 不能处理大对象.大对象被忽略因而必须手工操作.

要重载该数据库:

% psql -e database < db.out