好的,所以我对linux比较陌生。 几个月前,我设法build立了一个使用亚马逊构build的CentOS,PHP和Postgres 9.1的网站。 我在/ pgdata上完成了一个initdb,它安装在我为此创build的Amazon卷上。 这个网站自那以后一直在哼唱,而且我觉得这毕竟不是那么辛苦! 🙂
但现在,我的网站已经closures了。 这是发生了什么…
昨天我login开始一些网站的变化。 我看到的第一件事是有一些更新可用(自然),所以我跑了“百胜更新”。 它做了一堆事情,并报告成功。 凉!
一切都很顺利我的网站上的变化,直到我执行一个Postgres函数的变化。 我得到一个错误:
错误:无法加载库“/usr/lib64/pgsql/plpgsql.so”:“/usr/lib64/pgsql/plpgsql.so”:未定义符号:SPI_plan_get_cached_plan
(我在我的函数中使用plpgsql)
谷歌带我到各地,似乎只是需要重新启动Postgresql。 我尝试了各种方法。 Postgres会停下来,但不会重新开始。
在这个过程中的某个时候,我得到了另一个(更有帮助的)错误信息:
“数据目录是由PostgreSQL 9.1版本初始化的,它与9.2.3版本不兼容。”
什么? 如果我的yum更新安装了Postgres的一个新的,不兼容的版本? 这是我们如何在Linux世界中滚动? 主要升级没有警告什么是需要或要求我的许可? Foowee,下次我会更加小心。 顺便说一句,如果我再次有空,我该怎么办?
无论如何,这导致我这些 链接 ,当然还有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?
谢谢!
编辑:我决定我的下一个最好的select是放弃9.1和我的数据库(我有一个CSV格式的数据的副本),并重新创build一个9.2初始的9.1版本的脚本从头开始数据库。
sudo su –
cd / pgdata
rm -fr *。*(从9.1数据库中删除/ pgdata中的所有内容 – 我先保留了一个备份)
su – postgres
initdb -D / pgdata -E UTF
编辑postgresql.conf和pg_hba.conf并启动服务器。
我还是不知道
service postgresql upgrade工作 但经过几天的谷歌search和服务器停机时间,我不在乎了。
无意升级是亚马逊的包装故障。 其他Linux发行版在升级时通常不会中断PostgreSQL。
要摆脱这个混乱,请参阅常见问题中的这个条目:
我从PostgreSQL 9.1升级到9.2需要采取哪些步骤?
PostgreSQL 9.2提供了重要的新function和性能改进,并已根据客户请求包含在Amazon Linux AMI 2012.09发行版中。
将PostgreSQL从9.1升级到9.2后,数据库服务将不再启动。 发生这种情况是因为9.1版本的数据库格式不能立即用于9.2服务器。 我们提供了postgresql-upgrade包作为自动安装的最新版本postgresql 9.2。 这使您可以使用service postgresql升级对数据库执行就地升级。
在幕后,这运行pg_upgrade将数据库迁移到新的格式。 请注意,升级会将configuration文件(如pg_hba.conf)重置为干净状态。 您的旧configuration文件存储在/ var / lib / pgsql9 / data-old中,在复审后可以复制到/ var / lib / pgsql9 / data中的默认文件中。
一旦升级完成,configuration文件恢复,服务应该正常启动。