Postgresql
使用 pg_isready 監控特定數據庫
如何使用 pg_isready 監控特定數據庫?
實例:DBSPG10T1 版本:10.14 埠:6241
postgres@postgres # SELECT datname FROM pg_database; datname ----------- postgres template1 template0 dbspg10t1 [postgres@HOSTNAME ~]$ if pg_isready -d postgres://localhost:6241/dbspg10t1; then echo "200 OK"; else echo "500 NOT OK"; fi localhost:6241 - accepting connections 200 OK
數據庫測試不存在,但 pg_isready 仍然返回 ok。
[postgres@HOSTNAME ~]$ if pg_isready -d postgres://localhost:6241/test; then echo "200 OK"; else echo "500 NOT OK"; fi localhost:6241 - accepting connections 200 OK
這是語法問題嗎?
看起來這可能是一個已知的錯誤。
pg_isready
不使用psql
實用程序的通用程式碼。請參閱 2013 年有關該主題的 pgsql-hackers 執行緒:Re: -d option for pg_isready is broken。沒有深入研究它,相關的報價似乎是……
> > 為什麼我們不使用與 psql 完全相同的程式碼?為什麼 pg_isready 有自己的程式碼呢? > > >
因為 pg_isready 想要列印我們實際嘗試連接的主機和埠,這是其他實用程序所沒有的。事實證明,沒有乾淨的 API。我們試圖發明一些東西,但證據似乎表明我們發明的東西會咬人。
但是為什麼沒有改變呢?
…擁有 host 和 hostaddr 的全部意義似乎在於您可以對連接的位置撒謊。如果您設置 host=some.pretty.domain.name hostaddr=1.2.3.4,關鍵是說您正在連接到第一個,而在幕後實際上連接到第二個。現在,我不清楚這有什麼價值,但在某些時候顯然有人認為這是一個好主意,所以我們需要小心改變它。
公平地說,這是基於對該執行緒的粗略閱讀,但出於您的目的,我認為將其視為已知錯誤是安全的
bash-4.4$ pg_isready /tmp:5432 - accepting connections bash-4.4$ pg_isready -d postgres://127.0.0.1 127.0.0.1:5432 - accepting connections bash-4.4$ pg_isready -d postgres://127.0.0.1/foo 127.0.0.1:5432 - accepting connections bash-4.4$ psql postgres://127.0.0.1/foo psql: error: FATAL: database "foo" does not exist bash-4.4$