2017-10-04 116 views
3

我在Postgres的搜索異常處理程序,它說添加如何在postgres中做全局異常處理程序?

DECLARE 
    text_var1 text; 
    text_var2 text; 
    text_var3 text; 
BEGIN 
    -- some processing which might cause an exception 
    ... 
EXCEPTION WHEN OTHERS THEN 
    GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT, 
          text_var2 = PG_EXCEPTION_DETAIL, 
          text_var3 = PG_EXCEPTION_HINT; 
-- call a function which log all this variable perform log_function (text_var1 ,text_var2 , text_var3); 
END; 

如果我這樣做,對於每一個功能是這有效嗎?

任何性能缺乏這種方法?

我們不能爲所有函數設置全局異常處理程序嗎?在這種方法中,我爲每個函數添加了異常處理程序。

然後將它們保存在變量中並保存日誌。我們可以有任何全球性的錯誤處理程序嗎?

編輯

我必須登錄所有的異常來Postgres裏到表。我正在關注這一步。

1)寫在所有的功能GET堆積塊(如果我有20功能然後我在所有功能寫塊)

2)比表然後登錄。

我要的是應該有機制在Postgres的全局異常處理程序,所以我根本不寫得到的Postgres STACKED EXCEPTION塊的所有功能

+1

yes - 你可以記錄錯誤記錄並使用csv日誌格式將其導入到表格中 - 我認爲這是捕捉所有異常的意思方式 –

回答

1

在PL/pgSQL的塊使用的EXCEPTION子句對業績產生負面影響;請參閱「提示」在the documentation of error trapping

無法自動處理PL/pgSQL函數中的所有頂級異常。

我的建議是,您不會記錄數據庫功能中的錯誤,而是從應用程序中記錄錯誤。首先,當你的交易回滾時,日誌將會消失。

+0

代碼是樣本當前處理異常的方式。對於當前的過程,我必須在所有函數中編寫該塊。我們可以通過postgres中的全局處理程序來做到這一點嗎? –

+0

我在編輯部分添加了更多信息和用例。 –