ubuntu

Ubuntu如何升级PostgreSQL版本

小樊
46
2025-09-29 19:40:50
栏目: 云计算

Ubuntu升级PostgreSQL版本的详细步骤

一、升级前的准备工作

  1. 备份数据库:升级前务必备份所有数据库,防止数据丢失。使用pg_dumpall工具导出所有数据库到一个SQL文件:
    sudo -u postgres pg_dumpall > /path/to/backup.sql
    
  2. 检查当前版本:确认当前PostgreSQL版本,确保升级路径符合官方要求(如14.x→15.x为大版本升级,14.5→14.7为小版本升级):
    sudo -u postgres psql -c "SELECT version();"
    
  3. 确认兼容性:大版本升级需参考PostgreSQL官方文档,检查新版本与旧版本的兼容性(如数据类型、扩展模块的支持情况)。

二、小版本升级(如14.5→14.7)

小版本升级通常通过包管理器直接完成,无需初始化新集群,步骤较简单:

  1. 停止PostgreSQL服务:避免升级过程中数据写入冲突:
    sudo systemctl stop postgresql
    
  2. 更新软件包列表并升级
    sudo apt update
    sudo apt upgrade postgresql-14  # 替换为当前主版本号(如14)
    
  3. 启动服务并验证
    sudo systemctl start postgresql
    psql --version  # 确认版本已更新
    

三、大版本升级(如14.x→15.x)

大版本升级需安装新版本软件包并通过pg_upgrade工具迁移数据,步骤如下:

  1. 添加PostgreSQL官方APT仓库:获取最新版本的安装包:
    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
    
  2. 安装新版本PostgreSQL
    sudo apt install postgresql-15  # 替换为目标版本号(如15)
    
  3. 停止旧版本服务
    sudo systemctl stop postgresql
    
  4. 初始化新版本数据库集群
    sudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main/
    
  5. 迁移数据(两种方法选择其一)
    • 方法一:使用pg_upgrade(快速,推荐)
      检查升级兼容性:
      sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade \
        -b /usr/lib/postgresql/14/bin \  # 旧版本二进制目录
        -B /usr/lib/postgresql/15/bin \  # 新版本二进制目录
        -d /var/lib/postgresql/14/main \ # 旧版本数据目录
        -D /var/lib/postgresql/15/main \ # 新版本数据目录
        --check
      
      若检查通过,执行升级:
      sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade \
        -b /usr/lib/postgresql/14/bin \
        -B /usr/lib/postgresql/15/bin \
        -d /var/lib/postgresql/14/main \
        -D /var/lib/postgresql/15/main \
        -o '-c config_file=/etc/postgresql/14/main/postgresql.conf' \
        -O '-c config_file=/etc/postgresql/15/main/postgresql.conf'
      
      升级完成后更新统计信息:
      sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
      
    • 方法二:逻辑转储(安全,跨版本兼容)
      导出旧数据库:
      sudo -u postgres pg_dumpall -f /path/to/backup.sql
      
      初始化新集群并启动服务:
      sudo /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main/
      sudo systemctl start postgresql@15-main
      
      导入数据:
      sudo -u postgres psql -f /path/to/backup.sql postgres
      
  6. 配置新版本
    • 复制旧版本的配置文件(postgresql.confpg_hba.conf)到新目录:
      sudo cp /etc/postgresql/14/main/*.conf /etc/postgresql/15/main/
      
    • 修改端口(若新旧版本并存,需将新版本端口改为其他值,如5433):
      sudo sed -i 's/port = 5432/port = 5433/' /etc/postgresql/15/main/postgresql.conf
      
  7. 启动新版本服务并验证
    sudo systemctl start postgresql@15-main
    sudo -u postgres psql -p 5433 -c "SELECT version();"  # 确认新版本运行正常
    
  8. 清理旧版本(可选)
    卸载旧版本软件包并删除旧集群:
    sudo apt remove postgresql-14 postgresql-server-dev-14  # 替换为旧版本号
    sudo pg_dropcluster 14 main --stop  # 删除旧集群
    

四、升级后的注意事项

0
看了该问题的人还看了