Ubuntu 20.04多PostgreSQL版本管理:卸载15、安装16及防误装
PostgreSQL版本清理与迁移问题
我使用Ubuntu Server 20.04系统,当前正在运行带有PostGIS的PostgreSQL 13,计划逐步迁移到PostgreSQL 16,暂时让两个版本共存并逐个迁移数据库。但首先需要清理已安装的软件包,且不确定如何操作才不会损坏PostgreSQL 13。
已安装的PostgreSQL相关包
执行apt list --installed | grep postgre得到以下结果:
me@myserver:/$ apt list --installed | grep postgre WARNING: apt does not have a stable CLI interface. Use with caution in scripts. postgresql-13-postgis-3-scripts/now 3.4.0+dfsg-1.pgdg20.04+1 all [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1] postgresql-13-postgis-3/now 3.4.0+dfsg-1.pgdg20.04+1 amd64 [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1] postgresql-13/now 13.12-1.pgdg20.04+1 amd64 [installed,upgradable to: 13.13-1.pgdg20.04+1] postgresql-15-postgis-3-scripts/now 3.4.0+dfsg-1.pgdg20.04+1 all [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1] postgresql-15-postgis-3/now 3.4.0+dfsg-1.pgdg20.04+1 amd64 [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1] postgresql-15/now 15.4-1.pgdg20.04+1 amd64 [installed,upgradable to: 15.5-1.pgdg20.04+1] postgresql-client-13/now 13.12-1.pgdg20.04+1 amd64 [installed,upgradable to: 13.13-1.pgdg20.04+1] postgresql-client-15/now 15.4-1.pgdg20.04+1 amd64 [installed,upgradable to: 15.5-1.pgdg20.04+1] postgresql-client-common/now 241.pgdg20.04+1 all [installed,upgradable to: 256.pgdg20.04+1] postgresql-common/now 241.pgdg20.04+1 all [installed,upgradable to: 256.pgdg20.04+1] postgresql-postgis-scripts/now 3.4.0+dfsg-1.pgdg20.04+1 all [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1] postgresql-postgis/now 3.4.0+dfsg-1.pgdg20.04+1 amd64 [installed,upgradable to: 3.4.1+dfsg-1.pgdg20.04+1]
运行中的集群
执行pg_lsclusters发现PostgreSQL 15也在运行:
me@myserver:/$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 13 main 5432 online postgres /dataraid/postgresql/13/main log/postgresql-%Y-%m-%d_%H%M%S.log 15 main 5433 online postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log
卸载时的问题
尝试执行apt remove postgresql-15-postgis-3时,系统提示会连带删除PostgreSQL 13相关包,因此终止操作:
root@myserver:/# apt remove postgresql-15-postgis-3 Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: libboost-serialization1.71.0 libfwupdplugin1 libgmpxx4ldbl libjson-perl libllvm10 libllvm9 libprotobuf-c1 libsfcgal1 libxmlb1 pgdg-keyring Use 'sudo apt autoremove' to remove them. The following additional packages will be installed: postgresql-client-common The following packages will be REMOVED: pgbouncer postgresql-13 postgresql-13-postgis-3 postgresql-15 postgresql-15-postgis-3 postgresql-common postgresql-postgis The following packages will be upgraded: postgresql-client-common 1 upgraded, 0 newly installed, 7 to remove and 24 not upgraded. Need to get 94.0 kB of archives. After this operation, 127 MB disk space will be freed. Do you want to continue? [Y/n] n Abort.
三个问题
- 如何在不影响PostgreSQL 13的前提下,安全卸载PostgreSQL 15?
- 如何避免未来再出现这类自动安装其他PostgreSQL版本的情况?
- 如何正确安装PostgreSQL 16(是否应执行
apt install postgresql-16-postgis-3)?
问题解答
1. 安全卸载PostgreSQL 15的步骤
问题根源是postgresql-postgis虚拟包依赖默认PostgreSQL版本,直接卸载15的PostGIS会触发连锁删除。按以下步骤操作:
- 停止并禁用PostgreSQL 15集群:
sudo pg_ctlcluster 15 main stop sudo systemctl disable postgresql@15-main - 单独卸载15版本的组件:
直接指定卸载15的核心包和对应PostGIS组件,避开虚拟包:sudo apt remove --purge postgresql-15 postgresql-15-postgis-3 postgresql-15-postgis-3-scripts postgresql-client-15 - 清理无用依赖:
执行自动清理命令,确认不会删除13相关包:sudo apt autoremove --purge - 验证13版本状态:
确认13集群正常运行:pg_lsclusters sudo systemctl status postgresql@13-main
2. 防止自动安装其他PostgreSQL版本的方法
核心是锁定默认版本并避开虚拟包:
- 锁定PostgreSQL 13的核心包:
阻止这些包被自动升级或删除:sudo apt-mark hold postgresql-13 postgresql-13-postgis-3 postgresql-13-postgis-3-scripts postgresql-client-13 - 修改默认版本配置:
编辑配置文件设置默认版本为13:
添加或修改以下行:sudo nano /etc/postgresql-common/createcluster.confdefault_version = 13 - 避免使用虚拟包:
后续安装组件时,直接指定具体版本的包(比如postgresql-13-postgis-3),不要用postgresql-postgis这类虚拟包。
3. 正确安装PostgreSQL 16的步骤
直接安装指定版本的组件,确保与13版本共存:
- 确认PGDG源配置:
Ubuntu 20.04的PGDG源默认支持16版本,若未配置可执行以下命令添加(已配置则跳过):sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update - 安装PostgreSQL 16及对应PostGIS:
直接安装指定版本的包,不会影响13版本:sudo apt install postgresql-16 postgresql-16-postgis-3 postgresql-16-postgis-3-scripts - 验证16集群状态:
安装完成后确认集群已初始化并可启动:pg_lsclusters sudo systemctl start postgresql@16-main - 数据库迁移建议:
可以用pg_dump导出13的数据库,再用psql导入16;批量迁移可使用pg_upgrade工具,操作前务必备份数据。
内容的提问来源于stack exchange,提问作者rouen
相关产品推荐
相关产品推荐

