最近 PostgreSQL 15 版本正式發布了,新版本的各種特性和好處本文就不展開介紹了,主要介紹一下 Windows 環境下 PostgreSQL 大版本升級的方法,我們現在的幾個資料庫都是運行在 Windows服務器的 PostgreSQL 14,
首先準備一份新版本的 PostgreSQL 初始化,并調整好所有設定,關于這一步其實和安裝一個全新的 PostgreSQL 操作差不多,可以看我之前 的一篇博文 Windows 系統 PostgreSQL 手工安裝配置方法
不過在操作的時候對于新版本的PostgreSQL只要初始化之后,調整好對應的 postgresql.conf 就可以了,不需要去執行安裝服務那些步驟,我們只需要一個調整好設定的 postgreSQL 實體就可以了,甚至都不需要啟動它,

這個就是我們從 PostgreSQL官網下載的一份最新版的 PostgreSQL15 的壓縮包,我們首先初始化實體
initdb -D "C:\Software\PostgreSQL15\data" -E UTF8 -U postgres --locale="Chinese (Simplified)_China.936" --lc-messages="Chinese_China.936" -A scram-sha-256 -W

這里需要注意的一個點是,設定密碼時最好和老版本的實體 postgres 賬戶密碼保持一致,實體化的時候引數中傳遞的編碼格式 如 Chinese (Simplified)_China.936,Chinese_China.936 這些一定要和原來老版本的實體最好保持一直,密碼加密格式最好也是和老版本的實體保持一直如 scram-sha-256,實體化之后根據自己的需要把 postgresql.conf 檔案中的配置引數按照老版本中改動過的地方按照自己需求再調整一次,然后把 pg_hba.conf 直接復制到新版本中,原則就是新老版本盡量保持配置一致,
準備好這些之后就可以開始升級操作了,首先關閉老的實體,確保新老版本的兩個實體都沒有啟動,都在關閉狀態,
net stop PostgreSQL


檢查新老實體版本所在的檔案夾,我們的賬戶是都有完整的全部權限,我這里 cmd 命令是以 Administrator 賬戶運行的,所以我為兩個檔案夾都賦予了 Administrator 的完整權限
然后在新版本的 bin 下執行如下命令 cmd環境
cmd
set PGPASSWORD=xxxxxx (xxxx為postgres 的密碼)
pg_upgrade -b "c:\Software\PostgreSQL\bin" -B "c:\Software\PostgreSQL15\bin" -d "c:\Software\PostgreSQL\data" -D "c:\Software\PostgreSQL15\data" -U postgres
注釋:> pg_upgrade -b "舊的bin目錄" -B "新的bin目錄" -d "舊的data目錄" -D "新的data目錄" -U postgres

像上圖的狀態,就說明我們的升級命令運行成功了,
命令執行完成之后記得直接關閉 cmd 視窗,否則后面修改實體名稱時會提示有占用,
這個時候我去把原來老的實體,修改一個名字,比如我這里老的實體原本路徑為 C:\Software\PostgreSQL,我們修改這個檔案夾名稱為 C:\Software\PostgreSQL14 ,然后修改我們新版本的實體路徑 C:\Software\PostgreSQL15 為 C:\Software\PostgreSQL 其實就是調整一下兩個實體檔案夾的名字,重命名一下,
重命名調整好之后,就可以啟動我們的 PostgreSQL 服務了,
net start PostgreSQL

啟動之后切換到再次進入到 bin 目錄運行
cmd
set PGPASSWORD=xxxxxx (xxxx為postgres 的密碼)
vacuumdb -U postgres --all --analyze-in-stages

如果原先老的實體中有部分資料庫用到了一些擴展比如 postgis 等,還需要執行一個擴展的升級命令如下:
psql --username postgres --file update_extensions.sql postgres
然后在新版本實體下洗掉程序中產生的一些無用檔案即可,如
\data\pg_upgrade_output.d (檔案夾)
\bin\delete_old_cluster.bat (檔案)
\bin\update_extensions.sql (檔案)
至此 Windows版 PostgreSQL 利用 pg_upgrade 進行大版升級操作 就講解完了,有任何不明白的,可以在文章下面評論或者私信我,歡迎大家積極的討論交流,有興趣的朋友可以關注我目前在維護的一個 .NET 基礎框架專案,專案地址如下
https://github.com/berkerdong/NetEngine.git
https://gitee.com/berkerdong/NetEngine.git
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526051.html
標籤:PostgreSQL
