Postgresql

在 psql 錯誤消息中獲取 SQLSTATE

  • May 21, 2020

我有以下問題。

SELECT * FROM tgvbn();
ERROR:  function tgvbn() does not exist
LINE 1: SELECT * FROM tgvbn();
                     ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

由於官方文件的附錄 A僅說明了 error_codes 和條件名稱,而沒有說明實際的消息,因此只能猜測“No function matches…”指的是42883 / undefined_function. 我可以設置log_error_verbosity = verbose-postgresql.conf但這會影響日誌,而不是返回給客戶端的消息:

控制記錄在伺服器日誌中的每條消息的詳細資訊量。

好吧,我可以查閱日誌以獲取這條資訊,但是有什麼方法可以將它包含在錯誤消息中嗎?

根據 a_horse_with_no_name 的評論,我開始四處搜尋psql並找到了解決方案:

\set VERBOSITY verbose
SELECT * FROM tgvbn();

ERROR:  42883: function vfjkb() does not exist
...

現在進入.psqlrc. 可以在psql 文件中找到詳細資訊和更多選項。

看起來從 9.2 版開始就有這樣的功能:

DECLARE
 text_var1 text;
 text_var2 text;
BEGIN
 -- some processing which might cause an exception
 ...
EXCEPTION WHEN OTHERS THEN
 GET STACKED DIAGNOSTICS text_var1 = RETURNED_SQLSTATE,
                         text_var2 = PG_EXCEPTION_DETAIL;
END;

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