我在 EC2 实例上安装了 PostgreSQL 9.2,yum install
现在需要升级到 PostgreSQL 9.4。我注意到将yum list
9.2、9.3 和 9.4 列为完全独立的软件包,因此我不能仅使用 yum 升级功能进行升级。
我有一个需要在升级后继续使用的数据库。此外,我在 ( /文件/var/lib/pgsql9/data
中的服务器证书/密钥、对 的更改、对 的更改)中设置了一些配置,这些配置也应该继续使用。.crt
.key
pg_hba.conf
postgresql.conf
我看见这个问题但那里的信息与 yum 包场景无关(并且似乎已经过时),而且没有具体解决配置问题。
在保留我的配置设置并确保数据库在升级后可运行的同时,完成升级的正确/推荐的方法是什么?
答案1
我找到了一种方法来做到这一点,但我不确定这是否是正确/推荐的方法。我的步骤如下:
1.保存现有配置
运行sudo vim /var/lib/pgsql9/data/postgresql.conf
并将sudo vim /var/lib/pgsql9/data/pg_hba.conf
所有未注释的设置复制到某处。稍后您必须在新的 PostgreSQL 版本中手动设置它们。
2.安装新的 PostgreSQL 版本
使用yum list
查找正确的软件包名称并安装它们。在我的例子中,我sudo yum install postgresql94.x86_64
需要sudo yum install postgresql94-server.x86_64
运行postgres --version
,pg_dumpall --version
并psql --version
确保版本已更新为新版本。
3.保存现有数据并关闭数据库
停止任何可能更改数据库的进程(例如您的 Web 应用程序)。运行sudo pg_dumpall >db.out
,然后立即sudo service postgresql stop
运行 以停止服务器并防止进一步的数据更改。使用 检查生成的数据转储vim db.out
- 它应该包含纯 SQL 格式的所有 DB 架构和数据。您可能希望在继续之前备份此文件。
4.保存旧数据库目录
sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old
5. 为新版本的 PostgreSQL 创建新的数据库目录
sudo mkdir /var/lib/pgsql9
sudo chown postgres /var/lib/pgsql9
sudo su postgres
在sudo su
提示中:
initdb -D /var/lib/pgsql9/data
然后按Ctrl-D
6.将证书复制到新的数据库目录
如果您正在使用证书,请将其复制到新目录并赋予其适当的所有权,例如:
sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data
sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/server.crt
sudo chown postgres /var/lib/pgsql9/data/server.key
7.配置新数据库
使用sudo vim /var/lib/pgsql9/data/postgresql.conf
和sudo vim /var/lib/pgsql9/data/pg_hba.conf
根据您在步骤 1 中保存的设置配置数据库。
8.修复postgresql服务以指向新版本
运行ls -ila /etc/rc.d/init.d
- 注意每个版本都有一个脚本(postgresql92
、postgresql94
),但postgresql
脚本本身链接到旧版本。通过运行sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql
并再次运行ls
命令来修复此问题,以验证链接是否正确。
9.运行服务
运行sudo service postgresql start
。如果服务无法启动,则可能是权限错误(您忘记了chown
上面的步骤)或配置语法错误。您可以查看日志(/var/lib/pgsql94/pgstartup.log
和 中的文件/var/lib/pgsql9/data/pg_log
)来查找错误。如果服务已正确启动,您可以运行sudo su postgres
,然后psql
验证您的数据库是否正在运行(使用\q
退出并按 Ctrl-D 退出sudo su
)。
10.恢复旧数据
sudo cp db.out /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/db.out
sudo su postgres
在该提示中:
psql -d postgres -f /var/lib/pgsql9/data/db.out
您应该会看到一堆数据库命令滚动显示。此时您的数据库已升级并正在运行。您可以通过运行 进行验证psql
。使用\list
命令查看数据库列表、\connect (database_name)
连接到数据库、\dt
在连接后查看表列表,或运行以分号结尾的 SQL 命令。键入\q
退出。
验证完成后,按Ctrl-D
退出sudo su
。
11. 清理
此时,一旦您确定一切正常,您可以删除/var/lib/pgsql9.old
、/var/lib/pgsql9/db.out
和db.out
任何其他备份。