Postgresql

如何在 RAISE 語句中使用 COLUMN 和 TABLE 選項

  • March 15, 2019

根據文件,RAISE 有稱為 TABLE 和 COLUMN 的選項。但是,如果我明確設置它們,它們最終不會出現在生成的錯誤消息中。錯誤消息中似乎只使用了 DETAIL 和 HINT。你怎樣才能讓其他選項出現?例如:

RAISE EXCEPTION 'invalid_parameter' USING
   DETAIL = FORMAT('The specified user "%s" was not found.', _usr),
   HINT = 'Enter the username of an existing user.',
   COLUMN = 'username',
   TABLE = 'accounts';

發出錯誤消息:

... ERROR:  invalid_parameter
... DETAIL:  The specified user "aanders" was not found.
... HINT:  Enter the username of an existing user.
... CONTEXT:  PL/pgSQL function _api.find_user(text) line 24 at RAISE
... PL/pgSQL function _api.accounts_update_trigger() line 97 at assignment
... STATEMENT:
...     WITH pg_source AS (...

沒有顯示“表”或“列”。

更新

我需要的關鍵術語是“VERBOSITY”——一旦我搜尋到重複的問題,例如https://stackoverflow.com/q/41959752/1571426 (不確定不同論壇上的問題是否使這個“重複”或不是。)

這取決於客戶端的詳細程度。使用 psql 時,發出

\set VERBOSITY verbose

在呼叫該語句之前會導致錯誤消息包括:

TABLE NAME:  accounts
COLUMN NAME:  username

在最新版本的 psql 中,也可以在\errverbose事後發出以詳細形式重新格式化最後一個錯誤消息。

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