http://www.wohedb.com/db_html_doc/administrator_guide/adm_9_backup_and_restore.htm
www.wohedb.com 中文数据库
第九章 备份与恢复
PostgreSQL提供了三种备份和恢复的方式:SQL dump、文件系统复制和联机热备份。 每一种备份方式都有自己的优点和缺点,下面将详细介绍。
9.1 SQL Dump
这种备份方式产生一个文本文件,里面包含创建各种数据库对象的SQL语句和每个表中的数据。另外,表上创建的索引中的数据不会被导出,只会导出索引的定义信息。在恢复数据库的时候,索引会被重建。可以使用数据库提供的工具pg_dumpall和pg_dump来进行备份。pg_dumpall会备份一个数据库集群中的所有信息和数据。pg_dump只备份数据库集群中的某个数据库的数据,它不会导出角色和表空间相关的信息,因为这些信息是整个数据库集群共用的,不属于某个单独的数据库。pg_dump的基本用法如下:
pg_dump 数据库名 > 备份文件名
pg_dump将结果写到标准输出中,可以用操作系统的重定向命令将结果写到文件中。
可以在运行数据库的机器上执行pg_dump命令,也可以在其它的机器上执行pg_dump命令。 可以使用选项-h和-p来指定运行数据库的主机名和数据库监听的端口。例如:
pg_dump -h db_server1 -p 5432 product > backup_file
该命令连接机器db_server1上在端口5432处监听的数据库,将数据库product的数据备份到文件backup_file中。如果pg_dump命令没有使用-h和-p选项,将使用环境变量PGHOST的值作为机器名,使用环境变量PGPORT的值作为数据库的端口。如果用户没有定义环境变量PGHOST,默认使用本机名作为运行数据库的机器名。
默认的情况下,pg_dump使用当前的操作系统用户作为连接数据库时使用的用户。可以使用选项-U或者设置环境变量PGUSER来指定连接数据库时使用的用户名。例如:
pg_dump -U liming -h db_server1 -p 5432 product > backup_file
该命令使用用户liming连接机器db_server1上在端口5432处监听的数据库,将数据库product的数据备份到文件backup_file中。
一般情况下,应该使用超级用户连接数据库进行备份操作,因为超级用户可以访问数据库中的任何信息。使用普通数据用户连接数据库,有些表可能无法访问。
运行pg_dump时,数据可以正常地执行其它操作。但ALTER TABLE这类修改数据库对象定义的操作会受到影响,可能会长时间处于等待状态而无法执行,所以在运行pg_dump命令时,不要在数据库中运行修改数据库对象定义的操作。
另外要注意的是,如果数据库中有些表使用OID来实现外键约束,应当在备份数据库时同时备份表的OID信息,使用pg_dump时加上选项–o即可达到这个目的。
9.1.1 恢复数据库
pg_dump创建的备份文件可以被工具psql识别。因此可以使