1.4. 如果你是在升级 #
PostgreSQL的内部数据存储格式会随新版本而变化。因此,如果你要升级的现有安装的版本号不是“7.3.x”,就必须按照这里的方法备份并恢复数据。这些说明假定你现有的安装在/usr/local/pgsql目录下,数据区域在/usr/local/pgsql/data中。请酌情替换为你实际的路径。
确保在备份期间和备份之后数据库没有被更新。这不影响备份的完整性,但已更改的数据当然不会包含在内。必要时,可以修改文件
/usr/local/pgsql/data/pg_hba.conf(或等价文件)中的权限,禁止除你之外的所有人访问。pg_dumpall >outputfile如果你需要保留 OID(例如把它们用作外键时),运行
pg_dumpall时使用-o选项。pg_dumpall不保存大对象。如果你需要保存大对象,请查阅第 9.1.4 节。做备份时,你可以使用当前运行版本中的
pg_dumpall命令。但为获得最佳结果,请尽量使用 PostgreSQL 7.3.21 的pg_dumpall命令,因为该版本相对旧版本包含错误修复和改进。虽然你尚未安装新版本时这条建议显得有些特立独行,但如果你打算把新版本与旧版本并行安装,遵循它是明智的。那样你就可以正常完成安装,稍后再传输数据。这还会减少停机时间。如果你把新版本安装在与旧版本相同的位置,那么最迟在安装新文件之前关闭旧服务器:
kill -INT `cat /usr/local/pgsql/data/postmaster.pid`7.0 之前的版本没有这个
postmaster.pid文件。如果你使用的是这样的版本,就必须自己找出服务器的进程 ID(例如输入ps ax | grep postmaster),并把它提供给kill命令。在开机时启动 PostgreSQL 的系统上,很可能有一个能完成同样事情的启动文件。例如,在 Red Hat Linux 系统上可能会发现
/etc/rc.d/init.d/postgresql stop有效。另一种可能是
pg_ctl stop。如果你安装在老版本所在的同一位置,最好也把旧安装移开,以防遇到问题需要回退。可以使用类似下面的命令:
mv /usr/local/pgsql /usr/local/pgsql.old
安装好PostgreSQL 7.3.21 之后,创建新的数据库目录并启动新服务器。记住,这些命令必须以特殊的数据库用户账户登录执行(如果你是在升级,该账户已经存在)。
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
最后,用
/usr/local/pgsql/bin/psql -d template1 -f outputfile恢复你的数据,这里使用新的psql。
这些主题在第 9.3 节中有详细讨论,无论如何都建议你阅读。