You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

三个问题

  1. 如何在不影响PostgreSQL 13的前提下,安全卸载PostgreSQL 15?
  2. 如何避免未来再出现这类自动安装其他PostgreSQL版本的情况?
  3. 如何正确安装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.conf
    
    添加或修改以下行:
    default_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:40:56