我最近使用dnf
.一切都很顺利,但我意识到 PostgreSQL 无法访问我的数据。试图奔跑pg_upgrade
,我得到了
Cannot upgrade because the database in /var/lib/pgsql/data is of
version 11 but it should be 12
因此,升级仅适用于一个版本。
如何升级两个或多个版本?
答案1
想法如下:
- 从 PGDG 存储库安装旧的 PostgreSQL 服务器。
- 使用它将所有数据转储到文件中。
- 返回当前服务器(来自 Fedora 的存储库)。
- 从转储文件中导入数据。
这一切都是以 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
,可能有小错误,但其要点应该没问题。