windows上使用pg_upgrad升級postgres


一、背景

更新前使用的postgres版本是11版本,現將11 升級到13.4

二、更新步驟

需要說明的是,postgres升級和一般的軟件升級有點不同,一般的軟件升級都是直接進行升級,而postgres相當於是安裝一個新版本,然后將舊版本的數據遷移到新版本中. 因為postgres部署在windows服務器上,所以相比於部署到linux服務器上更加的麻煩

1.下載13.4版本的postgres

2.停掉老版本的postgres,修改老版本的端口號 5432 改成5431  ;安裝新版本的postgres( 如果不停掉老版本的postgres,新版本在安裝時,端口會存在問題,安裝過程其實是一個初始化過程,也可以使用命令去初始化),安裝成功后停掉postgres服務(安裝成功會自動注冊到service中)

3.將兩個版本的/data/pg_hba.conf文件設置為不需要密碼(防止會報密碼相關的錯誤)

 

host all all 127.0.0.1/32 trust

版本11  是將md5 改成trust 版本13 使用新的加密 是將scram-sha-256 改成trust 改完之后要重新啟動一次服務,再停止。
4 修改兩個程序的文件夾的權限為everyone 所有權限

 

 這一步必須

5 然后使用管理員啟動cmd  (必須以管理員的方式啟動)切換到13 的bin文件夾下

D:\Program Files\PostgreSQL\13\bin  ,然后執行升級程序命令

pg_upgrade -b "d:\Program Files\PostgreSQL\11\bin" -B "C:\Program Files\PostgreSQL\13\bin" -d "d:\Program Files\PostgreSQL\11\data" -D "d:\Program Files\PostgreSQL\13\data" -U postgres

升級完成

三、遇到的問題以及解決
1.報錯connection to database failed: fe_sendauth: no password supplied

這是由於需要密碼認證導致的, 修改/data/pg_hba.conf文件,將md5改成trust即可

2.報錯The source cluster was not shut down cleanly.

這是由於postgres沒有被完全關閉導致的,一般遇到的概率比較小,在關閉時可以使用如下命令即可

./pg_ctl.exe -D ../data/ stop -s -m fast
3.權限問題

由於本次是在windows下更新postgres,所以還需要注冊postgres用戶,並給postgres用戶相應的權限(也試過不創建用戶,通過腳本來操作,但是貌似不行);所以建議大家按照官方文檔來操作,我開始是使用 git base來按照linux命令來更新的,花了好多時間都沒更新成功,最后還是按照官方文檔來了,成功更新了

4.日志查看

在使用pg_upgrade命令進行更新時,會在執行命令的當前目錄下產生四個日志文件,里面會存儲報錯信息,如果出現更新失敗的話,就看下這四個日志文件,然后解決下錯誤即可

5.遇到報錯“xx/data/base : No such file or directory”

這是由於執行命令的用戶沒有base目錄的權限導致的,給該用戶base目錄權限即可解決問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM