Postgresql

使用 pg_isready 監控特定數據庫

  • August 27, 2021

如何使用 pg_isready 監控特定數據庫?

實例:DBSPG10T1 版本:10.14 埠:62​​41

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$

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