Postgresql

Postgresql 連接超時太快

  • March 4, 2022

我在連接到 postgres 數據庫的 Windows 上執行 powershell 腳本。

在正常情況下一切正常,但我正在努力使系統更強大,並在斷電或重新啟動後自動重新啟動一切。

問題是,雖然腳本和數據庫在啟動時都成功啟動,但腳本執行得更快——事實上它在數據庫可用之前重新啟動。

該腳本與包含此內容的連接字元串連接。…

Timeout=60;CommandTimeout=8

我的理解(也許有缺陷?)是Timeout=60指連接超時,應該意味著“嘗試連接到數據庫長達 60 秒,如果沒有連接則退出並顯示錯誤消息”。但是,在實踐中,連接嘗試會立即失敗並出現錯誤

the database system is starting

為什麼它立即失敗而不等待 60 秒?在嘗試連接之前,是否有任何方法可以測試數據庫是否已重新啟動?還是我只需要繼續嘗試連接直到成功?

超時僅在數據庫啟動並執行並處於適合“協商”和接受連接的狀態時按預期工作。當“談判”花費太長時間時,您就會超時。

但是,在數據庫進入該狀態之前,它實際上並不存在,就好像伺服器已關閉一樣,因此超時參數不起作用。

您的 PostgreSQL 集群可能會作為 Windows 服務啟動。

服務之間可以有依賴關係,以便它們以“正確的順序”啟動。您可能必須打包您的腳本,以便它們可以通過相同的服務基礎設施進行控制。

或者你只是在你的腳本中呼叫timeout並讓它“等待”一會兒,希望數據庫在它繼續執行時準備好。

引用自:https://dba.stackexchange.com/questions/308289