溫馨提示×

Ubuntu PostgreSQL版本升級攻略

小樊
49
2025-09-27 18:07:40
欄目: 云計算

Ubuntu PostgreSQL版本升級攻略

升級PostgreSQL是維護數據庫的重要環節,需根據版本類型(小版本/大版本)選擇合適方法,并嚴格遵循步驟以避免數據丟失。以下是詳細操作指南:

一、升級前準備

1. 備份所有數據

升級前必須備份,確保數據可恢復。使用pg_dumpall導出所有數據庫(包括角色、表空間等):

sudo -u postgres pg_dumpall > /path/to/backup.sql

建議將備份文件存儲到遠程服務器或云存儲,避免本地磁盤故障導致數據丟失。

2. 檢查當前版本

確認當前PostgreSQL版本,判斷升級路徑(如12→13為小版本,14→15為大版本):

sudo -u postgres psql -c "SELECT version();"

3. 確認兼容性

  • 大版本升級(如14→15):查閱PostgreSQL官方文檔的“Release Notes”,確認新版本與當前版本的兼容性(如擴展、自定義函數等是否支持)。
  • 小版本升級(如14.5→14.7):通常無需額外檢查,直接通過包管理器升級即可。

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

小版本升級通過apt包管理器直接完成,步驟簡單且風險低:

  1. 停止PostgreSQL服務
    sudo systemctl stop postgresql
    
  2. 更新軟件包列表
    sudo apt update
    
  3. 升級PostgreSQL: 指定當前主版本號(如14),apt會自動升級到該主版本下的最新小版本:
    sudo apt install postgresql-14
    
  4. 重啟服務
    sudo systemctl start postgresql
    
  5. 驗證版本
    psql --version  # 或 sudo -u postgres psql -c "SELECT version();"
    

小版本升級無需數據遷移,升級后檢查數據庫功能是否正常即可。

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

大版本升級需更換數據庫集群,推薦使用pg_upgrade工具(快速)或邏輯轉儲(安全),以下分別介紹:

方法一:使用pg_upgrade(推薦,快速)

pg_upgrade是PostgreSQL官方提供的升級工具,直接遷移數據文件,耗時短,但需滿足版本兼容性(如14→15支持,10→12不支持)。

1. 添加官方倉庫(若未添加)

若當前Ubuntu版本未包含目標大版本,需添加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

安裝目標大版本(如15),不覆蓋舊版本:

sudo apt install postgresql-15
3. 停止舊版本服務
sudo systemctl stop postgresql
4. 初始化新版本集群

新版本會自動初始化集群,但需確認目錄(如/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
    

    若輸出“Check successful”,則可繼續。

  • 執行升級

    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'     # 新版本配置文件路徑
    
6. 更新統計信息

升級后需更新統計信息,優化查詢性能:

sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
7. 啟動新版本服務
sudo systemctl start postgresql@15-main  # 啟動新版本
sudo systemctl stop postgresql@14-main   # 可選:停止舊版本(需確認新版本正常)

方法二:邏輯轉儲(安全,跨版本兼容)

pg_upgrade不支持(如10→12),或需要跨平臺遷移,可使用邏輯轉儲,步驟如下:

1. 導出舊數據庫
sudo -u postgres pg_dumpall -f /path/to/backup.sql
2. 安裝新版本PostgreSQL

同方法一的步驟2。

3. 初始化新版本集群
sudo /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main/
4. 啟動新版本服務
sudo systemctl start postgresql@15-main
5. 導入數據
sudo -u postgres psql -f /path/to/backup.sql postgres
6. 驗證數據
sudo -u postgres psql -c "SELECT version();"

方法選擇建議

  • 優先使用pg_upgrade(快速,適合生產環境);
  • pg_upgrade不支持或需跨平臺,使用邏輯轉儲(安全,適合復雜環境)。

四、升級后配置與清理

1. 配置文件遷移

若使用pg_upgrade,舊版本的postgresql.conf、pg_hba.conf會自動復制到新目錄(如/etc/postgresql/15/main/)。需檢查以下配置:

  • 端口:若新舊版本并存,修改新版本的端口(如從5432改為5433):
    sudo sed -i 's/port = 5432/port = 5433/' /etc/postgresql/15/main/postgresql.conf
    
  • 認證方式:確保pg_hba.conf中的認證方式(如md5、scram-sha-256)符合需求,避免無法登錄。

2. 啟動/停止服務

  • 啟動新版本:
    sudo systemctl start postgresql@15-main
    
  • 停止舊版本(可選):
    sudo systemctl stop postgresql@14-main
    

3. 驗證升級

psql -p 5433 -U postgres -c "SELECT version();"  # 替換為新版本端口

檢查數據庫功能(如創建表、查詢數據)是否正常。

4. 清理舊版本

確認新版本運行穩定后,卸載舊版本軟件包并刪除舊集群:

sudo apt remove --purge postgresql-14 postgresql-server-dev-14  # 卸載舊版本
sudo rm -rf /etc/postgresql/14/ /var/lib/postgresql/14/           # 刪除舊配置和數據

5. 重啟服務(可選)

若停止了舊版本,可重啟新版本服務:

sudo systemctl restart postgresql

五、常見問題解決

1. 權限問題

pg_upgrade報錯“permission denied”,需確保舊數據目錄和新數據目錄的權限正確:

sudo chown -R postgres:postgres /var/lib/postgresql/14/main/
sudo chown -R postgres:postgres /var/lib/postgresql/15/main/

2. 配置文件沖突

若新舊版本的postgresql.conf有沖突(如max_connections),需手動合并,優先保留新版本的配置。

3. 擴展兼容性

升級后,部分擴展(如postgis)可能需要重新安裝:

sudo apt install postgis postgresql-15-postgis  # 示例:重新安裝postgis

通過以上步驟,可順利完成Ubuntu環境下PostgreSQL的版本升級。務必牢記:備份是升級的前提,選擇合適的升級方法,并仔細檢查每一步的操作結果。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女