我是Postgresql的新手,所以我不想爲一些基本任務創建我自己的結構體......
我的任務是創建函數並拋出異常(RAISE EXCEPTION 'test'
)條件讓客戶抓住它或在沒有正確處理的情況下重新拋出。問題是,在拋出之前,我想將異常LOG記錄到數據庫中的特殊表中,但意識到拋出錯誤是回滾之前做出的更改!有什麼方法可以改變這種行爲,或者我可以做的所有事情 - 添加一些CODE輸出參數,並基於該CODE在客戶端上拋出錯誤?我現在使用的示例代碼:在postgresql函數中拋出異常
CREATE OR REPLACE FUNCTION fn_...()
...
BEGIN
IF nretry_count >= nmax_retry
THEN
INSERT INTO log VALUES (error_type, value) VALUES (1,'Max retry exceeded!');
RAISE EXCEPTION 'Max retry count exceeded';
END IF;
END
$$ LANGUAGE plpgsql;
也許你可以在插入之前使用某種觸發器。在觸發函數中,您可以引發異常並將數據記錄到另一個表中。 https://www.postgresql.org/docs/9.6/static/plpgsql-trigger.html –
@BenH不在這種情況下:觸發器可以設置一些表的動作。在我的情況下,我沒有表格操作,只是一些條件,與任何表格都沒有直接關係。 – 0x49D1