如何在 PostgreSQL 中為單個函式啟用日誌記錄?
我想為 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 函式中執行此操作。)