pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
本节讨论如何把数据库数据从一个PostgreSQL版本迁移到更新的版本。软件安装过程本身不是本节的主题;相关细节见第 14 章。
一般而言,PostgreSQL的内部数据存储格式在大版本(第一个点号后的数字变化)之间可能发生变化。同一大版本下的小版本(第二个点号后的数字变化)不受此影响;它们总是具有兼容的存储格式。例如,8.1.1、8.2.3 和 8.3 互不兼容,而 8.2.3 和 8.2.4 是兼容的。在兼容的版本之间更新时,只需替换可执行文件并复用磁盘上的数据目录即可。否则就需要备份数据并在新服务器上恢复。这必须使用pg_dump来完成;文件系统级的备份方法显然不行。系统中有检查防止你在不兼容版本的PostgreSQL上使用数据目录,因此在数据目录上尝试启动错误版本的服务器不会造成太大损害。
建议使用新版本PostgreSQL的pg_dump和pg_dumpall程序,以利用这些程序中可能已实现的增强。当前版本的转储程序可以读取从 7.0 起任何服务器版本的数据。
停机时间最短的做法是把新服务器安装到不同目录,并让旧服务器和新服务器在不同端口上并行运行。然后可以用类似下面的命令:
pg_dumpall -p 5432 | psql -d postgres -p 6543
来传输数据。如果愿意,也可以使用中间文件。然后可以关闭旧服务器,并用旧服务器使用的端口启动新服务器。务必确保在开始运行pg_dumpall之后旧数据库不再被更新,否则会丢失那些更新。有关如何禁止访问,见第 20 章。
如果无法或不想并行运行两个服务器,可以在安装新版本之前先执行备份步骤,然后关闭旧服务器、把旧版本移开、安装新版本、启动新服务器并恢复数据。例如:
pg_dumpall > backup pg_ctl stop mv /usr/local/pgsql /usr/local/pgsql.old cd ~/postgresql-8.1.23 gmake install initdb -D /usr/local/pgsql/data postgres -D /usr/local/pgsql/data psql -f backup postgres
有关启动和停止服务器的方式及其他细节,见第 16 章。安装说明会提示执行这些步骤的合适时机。
把旧安装“移开”后,它可能不再能完全正常使用。有些可执行程序中包含指向各种已安装程序和数据文件的绝对路径。这通常不是大问题,但如果计划并行使用两个安装一段时间,应在构建时给它们分配不同的安装目录。(这个问题在PostgreSQL 8.0 及更高版本中已得到解决,但对移动更旧的安装需要小心。)
在实践中,在完全切换之前,你可能希望先在新版本上测试客户端应用程序。这也是同时安装新旧版本的另一个理由。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。