HOWTO · PostgreSQL
使用密碼連線到 PostgreSQL
本文說明使用密碼連線至 PostgreSQL 的幾種方法:透過命令列提示、pgpass 檔案、PGPASSWORD 環境變數或連線 URI。
本頁內容
本指南說明如何使用密碼驗證 psql 與 PostgreSQL 的連線。若希望每次連線時手動輸入密碼,請使用互動式提示;若要從已設定的 shell 啟動命令,請使用 PGPASSWORD;若要讓用戶端重複使用連線憑證,可使用密碼檔;若應用程式或命令接受連線 URI,則可使用 PostgreSQL 連線 URI。範例中的值都是佔位符,請換成你的資料庫名稱、使用者、主機、連接埠和密碼。
選擇密碼連線方式
若只需互動式登入一次,請使用密碼提示。若指令碼或 shell 命令需要從其程序環境取得密碼,請使用 PGPASSWORD。密碼檔可依符合的連線資訊提供憑證,無須在每個命令中輸入密碼。連線 URI 則將連線欄位放在同一個引數中,適用於要求使用 URI 的工具。
無論採用哪種方式,PostgreSQL 仍會驗證所選的資料庫角色。用戶端方式只是提供密碼,不會建立角色,也不會變更該角色的密碼。如果不確定該使用哪個使用者,請詢問資料庫管理員,或查看應用程式的連線設定。
使用 psql 並在提示時輸入密碼
執行 psql -U app_user -d app_db -W,並將 app_user 和 app_db 換成你要使用的資料庫角色與資料庫。-U 選取角色,-d 選取資料庫,而 -W 會要求 psql 在連線前提示輸入密碼。出現提示時再輸入密碼;密碼不會出現在命令文字中。
若伺服器不在用戶端所在的電腦上,或使用的不是預設連接埠,請加入 -h db.example.com -p 5432,並填入正確的主機與連接埠。出現密碼提示只表示 psql 正在要求憑證;連線是否成功,還取決於角色、資料庫、伺服器是否可連線,以及伺服器的驗證設定。
設定 PGPASSWORD 供連線使用
PGPASSWORD 會透過 psql 程序的環境提供密碼。若只要對單一 Bash 命令設定,請在命令前加上 PGPASSWORD='replace_me';在 PowerShell 中,先設定 $env:PGPASSWORD = 'replace_me',再執行 psql。在命令提示字元中,請於目前視窗執行 set PGPASSWORD=replace_me。請在本機將佔位值換成實際密碼。
以下 Bash 範例會設定變數,供從目前 shell 啟動的命令使用:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
export PGPASSWORD='replace_me'
接著從該 shell 執行 psql -h db.example.com -p 5432 -U app_user -d app_db,並依實際情況調整連線資訊。此變數會提供給用戶端程序;此處的命令並未連線至 PostgreSQL 伺服器。
PostgreSQL 的環境變數參考文件說明了用戶端環境變數。
將憑證存放在密碼檔中
密碼檔每行包含一筆連線記錄,欄位順序如下:hostname:port:database:username:password。例如,記錄可以寫成 db.example.com:5432:app_db:app_user:replace_me。請將所有範例值換成相符的連線資訊。PostgreSQL 的密碼檔文件說明了檔案格式。
使用 passfile 連線參數指定檔案。例如,執行 psql "host=db.example.com port=5432 dbname=app_db user=app_user passfile=/path/to/pgpass.conf"。請確保連線欄位與你要使用的記錄相符。如果用戶端找不到符合的記錄,仍可能提示輸入密碼,或依連線設定回報驗證失敗。
使用 PostgreSQL 連線 URI 連線
PostgreSQL URI 會將角色、密碼、主機、連接埠和資料庫放在同一個連線引數中。例如,執行 psql 'postgresql://app_user:replace_me@db.example.com:5432/app_db',並將佔位值換成你的連線資訊。主機與連接埠之間必須使用冒號。若要將連線資訊傳給接受 PostgreSQL URI 的程式或函式庫,也可使用 URI 格式。
密碼是 URI 欄位之一。只有在命令或應用程式接受 PostgreSQL 連線 URI 時,才使用 URI 格式。
排查連線與驗證失敗
先確認 -U 指定的是預期的資料庫角色,且 -d 指定的是預期的資料庫,再檢查主機與連接埠。請根據錯誤訊息判斷是連線或可連線性問題,還是驗證遭拒;提示出現的時機並不足以判斷原因,因為 psql -W 會在嘗試連線前提示,而其他用戶端流程可能會在連上伺服器後才提示。
若伺服器可連線但拒絕驗證,請確認密碼屬於所選角色,並確認伺服器的用戶端驗證設定允許此用戶端及連線方式。PostgreSQL 用戶端驗證文件說明了伺服器端規則。使用密碼檔時,請檢查指定的 passfile 路徑,並比對檔案中的主機、連接埠、資料庫和使用者名稱是否與命令一致。使用 PGPASSWORD 時,請確認啟動 psql 的 shell 或程序已設定該變數。這些檢查有助於找出需要修正的連線資訊或驗證來源。