Postgresql

如何在 PostgreSQL 中為單個函式啟用日誌記錄?

  • May 12, 2014

我想為 PostgreSQL 中的單個特定函式記錄整個函式執行時?這可能嗎?

postgresql.conf 中 log_min_duration_statement = 3000 的值,我嘗試這樣做: ALTER FUNCTION mychema.myfunc(json) SET log_min_duration_statement = 100,但是我在 /var/log/postgresql/postgresql-9.x-main.log 中看不到任何日誌

如果函式的 log_min_duration_statement 小於 postgresql.conf 中的 log_min_duration_statement 函式執行時會被記錄嗎?

我可以在某處添加一個異常來告訴 PostgreSQL 我希望我的函式被記錄,而不管全域 log_min_duration_statement 值是否<函式的 log_min_duration_statement?

我希望函式的 log_min_duration_statement 優先於全域配置值,以查看我感興趣的一個函式的日誌,而不是所有其他函式,因為為所有請求啟用日誌記錄會增加大量成本。

我嘗試了您描述的方法,但它也對我不起作用。由於log_min_duration_statement只能由超級使用者設置,我還嘗試使用 定義函式SECURITY DEFINER,以超級使用者身份登錄 - 無濟於事。

我剩下的唯一想法(僅適用於 pl/pgsql 函式)是將clock_timestamp()變數保存為BEGIN塊中的第一個語句,然後將 aRAISE LOG作為最後一個語句(在RETURN語句之前,如果有的話),不同之處在於目前clock_timestsmp()和已保存的。

據我了解,這樣做的結果可能比正常記錄所記錄的時間要小一些——進入和退出函式所花費的時間肯定不會被考慮在內。

(請注意,使用一些輔助函式,您也可以在 SQL 函式中執行此操作。)

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