我正在运行 Gentoo。我从 Postgresql 8.2.7 升级到了 9.0.1。在升级过程中的某个地方,旧的 Postgresql 被取消合并而不是被插入,所以它消失了。旧版本也从 portage 中消失了,所以我不能重新安装它。我的数据库中有 Postgresql 数据目录,但它毫无用处,因为 Postgresql 9.0.1 由于版本不匹配而拒绝运行它。
我尝试了很多解决方案但仍然无法解决这个问题。
如何使旧的 8.2.7 数据目录中的数据库与 Postgresql 9.0.1 一起工作?
答案1
将 PostgreSQL 数据库迁移到新的主要版本的官方方法是转储并重新导入:
一般而言,内部数据存储格式在 PostgreSQL 的主要版本之间可能会发生变化(第一个点后的数字会发生变化)。[...] 在兼容版本之间更新时,您只需替换可执行文件并重用磁盘上的数据目录即可。否则,您需要备份数据并在新服务器上恢复。
http://www.postgresql.org/docs/8.4/static/migration.html
因此,您需要安装 8.2.7。一种选择是手动在系统上安装 8.2.7(您可以自行构建,也可以下载一些二进制包,例如从 Debian 下载,然后手动解压并安装)。另一种选择是只安装附带 8.2.7 的发行版(在备用硬件上、备用分区上或虚拟机中)。
然后将文件复制到那里,启动数据库并执行pg_dumpall
。您可能需要调整 PostgreSQL 安装,以便它接受您的数据文件。
PS 我希望我不需要强调你应该首先测试你的数据库文件的备份(你肯定有)是否可以毫无问题地恢复,以防万一......
答案2
您不需要完全手动从源代码构建,也可以创建自己的覆盖,从互联网上的某个地方找到旧的 ebuild,然后从覆盖中重新出现 8.2。