备份 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