好吧,我对 Linux 还比较陌生。几个月前,我设法使用 Amazon 的 CentOS、PHP 和 Postgres 9.1 版本建立了一个网站。我在 /pgdata 上执行了 initdb,它安装在我为此目的创建的 Amazon 卷上。从那时起,该网站就一直很活跃,我觉得这毕竟不是那么难!:)
但现在,我的网站瘫痪了。事情是这样的...
昨天我登录开始进行一些网站更改。我看到的第一件事是有一些可用的更新(自然而然),所以我运行了“yum update”。它做了许多事情并报告成功。太棒了!
我的网站更改一切顺利,直到我对 Postgres 函数执行了更改。我收到一个错误:
错误:无法加载库“/usr/lib64/pgsql/plpgsql.so”:“/usr/lib64/pgsql/plpgsql.so”:未定义符号:SPI_plan_get_cached_plan
(我在我的函数中使用 plpgsql)
Google 引导我到多个地方,似乎都说我只需要重新启动 Postgresql。我尝试了各种方法。Postgres 会停止,但不会重新启动。
在此过程中的某个时刻,我收到了另一条(更有帮助的)错误消息:
“数据目录由 PostgreSQL 版本 9.1 初始化,与此版本 9.2.3 不兼容。”
怎么回事?我的 yum 更新是否安装了新的、不兼容的 Postgres 版本?这就是我们在 Linux 世界中的运作方式吗?重大升级没有警告任何内容或征求我的许可?下次我会更加小心。顺便问一句,如果我有时间,我应该怎么做?
无论如何,这让我这些 链接,当然还有 postgres 文档。我现在无法运行 pg_upgrade。这是我到目前为止的命令:
pg_upgrade -d /pgdata_temp -D /pgdata -b /usr/lib64/pgsql/postgresql-9.1/bin/ -B /??/ -v
我如何找到新的 Postgres bin 目录(对于 /B 参数)?它似乎不在任何地方。然而,当我运行
su-postgres
initdb -D /pgdata -E UTF8
cat /pgdata/PG_VERSION
...之前,我得到了“9.2”。
任何帮助都将不胜感激。也许我只是回滚到 9.1?这是我最好的策略吗?那么下次运行 yum update 时如何避免升级?或者,我很乐意升级,但我该怎么做并将现有数据库升级到 9.2.3?
谢谢!
编辑:我决定我的下一个最佳选择是放弃 9.1 和我的数据库(我有一份 CSV 格式的数据副本),并使用我在最初的 9.1 版本中保留的脚本从头开始重建一个 9.2 数据库。
sudo su -
cd /pgdata
rm -fr * .* (从 9.1 数据库删除 /pgdata 中的所有内容 - 我先保留了备份)
su - postgres
initdb -D /pgdata -E UTF
编辑postgresql.conf和pg_hba.conf并启动服务器。
我还是不知道
- yum 将 9.2 版二进制文件放在这里 - 但 9.1 版二进制文件目录仍然存在
- 如何开始
service postgresql upgrade
工作
但经过几天的谷歌搜索和服务器停机后,我不再关心了。
答案1
这次意外升级是亚马逊的包装错误。其他 Linux 发行版在升级时通常不会破坏 PostgreSQL。
为了摆脱这种困境,请参阅他们的常问问题:
我需要采取哪些步骤才能从 PostgreSQL 9.1 升级到 9.2?
PostgreSQL 9.2 提供了重要的新功能和性能改进,并且已根据客户要求包含在 Amazon Linux AMI 2012.09 版本中。
将 PostgreSQL 从 9.1 升级到 9.2 后,数据库服务将不再启动。发生这种情况的原因是 9.1 版本的数据库格式不能立即用于 9.2 服务器。我们已提供 postgresql-upgrade 包作为与最新版本的 postgresql 9.2 一起自动安装。这允许您使用 service postgresql upgrade 对数据库执行就地升级。
在后台,这将运行 pg_upgrade 以将您的数据库迁移到新格式。请注意,升级将重置配置文件(例如 pg_hba.conf)为干净状态。您的旧配置文件存储在 /var/lib/pgsql9/data-old 中,您可以在检查后将其复制到 /var/lib/pgsql9/data 中的默认文件。
升级完成并且配置文件恢复后,服务应该正常启动。