Postgresql 备份与恢复研究-研究postgresql实在无奈
Postgresql 备份与恢复研究
前言:
和任何包含珍贵数据的东西一样,Postgresql 数据库也应该经常备份。尽管这个过程相当简单, 但是我们还是应该理解做这件事所用的一些技巧和假设。
备份 Postgresql 数据有三种完全不同的方法:
1.sql 转储(类似oracle 的exp,imp,)
2.文件系统级别备份(也就是oracle冷备份。Down掉数据库。然后拷贝data目录下的文件。)
3.在线备份(类似oracle的归档模式下的备份)。
每种备份都有自己的优点和缺点。
由于时间篇幅有限:只重点讲述sql转储的方法.这个方法也是最常用最方便的逻辑备份恢复的方法。
以下我重点讲解sql 转储
sql 转储的方法采用的主意是创建一个文本文件,这个文本里面都是 sql 命令,当把这个文件回馈给服务器时,将重建与转储时状态一
样的数据库。 Postgresql 为这个用途提供了应用工具 pg_dump。这条命令的基本用法是:
pg_dump dbname > outfile
正如你所见,pg_dump 把结果输出到标准输出。 我们下面就可以看到这样做有什么好处。
pg_dump 是一个普通的 Postgresql 客户端应用(尽管是个相当聪明的东西。)这就意味着你可以从任何可以访问该数据库的远端主机上
面进行备份工作。 但是请记住 pg_dump 不会以任何特殊权限运行。具体说来, 就是它必须要有你想备份的表的读权限,因此,实际上你几乎
总是要成为数据库超级用户。
要声明 pg_dump 应该以哪个用户身份进行联接,使用命令行选项 -h host 和 -p port。 缺省主机是本地主机或你的环境变量PGHOST声明
的值。 类似,缺省端口是环境变量PGPORT或(如果它不存在的话)编译好了的缺省值。 (服务器通常有相同的缺省,所以还算方便。)
和任何其他 Postgresql 客户端应用一样, pg_dump 缺省时用与当前操作系统用户名同名的数据库用户名进行联接。 要覆盖这个名字,
要么声明 -U 选项, 要么设置环境变量PGUSER。 请注意 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 test1postgres > c:/test1.sql
原文链接:https://www.f2er.com/postgresql/197186.html