在 Fedora 上升级 2+ 版本的 PostgreSQL

在 Fedora 上升级 2+ 版本的 PostgreSQL

我最近使用dnf.一切都很顺利,但我意识到 PostgreSQL 无法访问我的数据。试图奔跑pg_upgrade,我得到了

Cannot upgrade because the database in /var/lib/pgsql/data is of
       version 11 but it should be 12

因此,升级仅适用于一个版本。

如何升级两个或多个版本?

答案1

想法如下:

  1. 从 PGDG 存储库安装旧的 PostgreSQL 服务器。
  2. 使用它将所有数据转储到文件中。
  3. 返回当前服务器(来自 Fedora 的存储库)。
  4. 从转储文件中导入数据。

这一切都是以 root 身份完成的。

安装 PostgreSQL 存储库:

dnf install https://download.postgresql.org/pub/repos/yum/reporpms/F-34-x86_64/pgdg-fedora-repo-latest.noarch.rpm

删除 Fedora 的 PostgreSQL(它与 PGDG 的冲突)并从 PGDG 存储库安装旧版本:

dnf remove postgresql postgresql-server
dnf install postgresql11 postgresql11-server

将旧数据复制到当前安装目录:

rsync -av /var/lib/pgsql/data/ /var/lib/pgsql/11/data/

运行旧服务器:

systemctl start postgresql-11.service

将所有数据转储到文件中:

su - postgres -c "pg_dumpall -p 5432 > /tmp/dump_file.sql"

撤消上述操作(停止服务器,终止 PGDG 软件包,重新安装 Fedora 的软件包):

systemctl stop postgresql-11.service
dnf remove postgresql11 postgresql11-server postgresql11-libs postgresql13 postgresql13-server postgresql13-libs
dnf install postgresql postgresql-server pg_top postgresql-contrib

您可能不需要pg_top和/或postgresql-contrib。还,

/var/lib/pgsql/data/pg_hba.conf如果需要更新(也许trust为本地连接设置方法?)。

将旧数据目录放开并重新初始化当前 PostgreSQL 的目录:

mv /var/lib/pgsql/data/ /var/lib/pgsql/data-old
mkdir /var/lib/pgsql/data
chown -R postgres:postgres /var/lib/pgsql/data/
postgresql-setup initdb

启用并启动当前服务器(来自 Fedora 存储库的服务器):

systemctl enable postgresql
systemctl start postgresql

导入数据:

su - postgres -c "pgsql -p 5432 < /tmp/dump_file.sql"

编辑2023-12-11:似乎新版本的Fedora有命令psql而不是pgsql

当对结果感到满意时,您可以删除在此过程中创建的数据:

  • /var/lib/pgsql/11- 从 PGDG 安装的旧服务器的数据目录。
  • /var/lib/pgsql/data-old- 在这一切混乱之前的原始数据。

如果您通常不使用 PGDG 存储库,您可能还想删除它:

dnf remove pgdg-fedora-repo

这可能是一种不太笨拙的方法,但它对我有用。另外,请注意,这是重建的history,可能有小错误,但其要点应该没问题。

相关内容