pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL的内部数据存储格式随新版本而变化。因此,如果你要升级的现有安装的版本号不是“8.1.x”,就必须按这里所述备份并恢复数据。这些说明假定你现有的安装在/usr/local/pgsql目录下,数据区域在/usr/local/pgsql/data中。请酌情替换为你实际的路径。
确保数据库在备份期间和备份之后不被更新。这不影响备份的完整性,但已更改的数据当然不会包含在内。必要时,可以修改文件/usr/local/pgsql/data/pg_hba.conf(或等价文件)中的权限,禁止除你之外的所有人访问。
pg_dumpall > outputfile
如果需要保留 OID(例如用作外键),运行pg_dumpall时请使用-o选项。
做备份时,可以使用当前运行版本的pg_dumpall命令。不过,为获得最佳结果,请尽量使用PostgreSQL 8.1.23 的pg_dumpall命令,因为该版本包含对旧版本的缺陷修复和改进。虽然在你尚未安装新版本时这条建议看似不合常理,但如果打算让新旧两个版本并行安装,遵循它是可取的。这种情况下你可以先正常完成安装,之后再传输数据。这也能缩短停机时间。
如果你把新版本安装在和老版本相同的位置,那么最迟在安装新文件之前,应关闭旧服务器:
pg_ctl stop
在开机时自动启动PostgreSQL的系统上,很可能有启动文件可以完成同样的事情。例如,在Red Hat Linux系统上可以发现
/etc/rc.d/init.d/postgresql stop
有效。
非常老的版本可能没有pg_ctl。如果找不到它或者它不能工作,可以找出老服务器的进程 ID,例如输入
ps ax | grep postmaster
然后这样通知它停止:
kill -INT processID
如果你安装在和老版本相同的位置,把旧安装移开也是好主意,以防遇到问题需要回退。可以使用类似下面的命令:
mv /usr/local/pgsql /usr/local/pgsql.old
安装PostgreSQL 8.1.23 之后,创建新的数据库目录并启动新服务器。记住,这些命令必须以特殊的数据库用户账户登录执行(如果你是在升级,该账户已经存在)。
/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 postgres -f outputfile
恢复数据,使用新的psql。
更多讨论见 第 23.4 节, 无论如何都建议你阅读。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。