Postgresql

Postgres 儲存函式的自定義錯誤程式碼類和編號

  • January 28, 2020

我正在 Postgres 11.5 中編寫儲存函式的集合,並且想要RAISE EXCEPTION在不滿足各種前提條件時使用。例如,null需要一個字元串或空字元串,或者一個超出範圍的整數參數等。

我可以RAISE EXCEPTION並提供詳細資訊、提示和消息…但是我應該為錯誤程式碼使用什麼範圍?我檢查了文件,但在這裡沒有找到任何指導:

https://www.postgresql.org/docs/11/errcodes-appendix.html

我在 StackOverflow 上進行了搜尋,發現了多年前的類似問題……但沒有明確的答案。

是否有一些安全或正常的塊或前綴可用於從儲存的函式/過程返回的自定義錯誤程式碼?

SQL 標準為您提供了指導:

參數中返回的字元串值SQLSTATE包括一個 2 個字元的類值,後跟一個 3 個字元的子類值,每個子類值都有一個實現定義的字元集,該字元集具有一個八位字節的字元編碼形式,並且限制為 <digit> 和<簡單拉丁大寫字母>s。表 33,“SQLSTATE類和子類值”,指定每個條件的類值和每個類值的子類值。

以 <digit> ‘0’、‘1’、‘2’、‘3’ 或 ‘4’ 之一或 <simple Latin upper case letter> ‘A’、‘B 之一開頭的類值’、‘C’、‘D’、‘E’、‘F’、‘G’ 或 ‘H’ 僅針對 ISO/IEC 9075 或任何其他國際標準中定義的條件返回。此類值的範圍稱為標准定義的類。一些此類程式碼保留供特定國際標準使用,如本條款其他部分所述。與同樣以這 13 個字元之一開頭的此類關聯的子類值僅在 ISO/IEC 9075 或某些其他國際標準中定義的條件下返回。 . 與以 <digit> ‘5’、‘6’、‘7’、‘8’ 或 ‘9’ 之一或 <simple Latin uppercase letter> ‘I 之一開頭的此類相關的子類值’,‘J’,‘K’,‘L’,‘M’,‘N’,‘O’,‘P’,‘Q’,‘R’,‘S’,‘T’,‘U’, “V”、“W”、“X”、“Y”或“Z”保留用於實現定義的條件,稱為實現定義的子類

以 <digit> ‘5’、‘6’、‘7’、‘8’ 或 ‘9’ 之一或 <simple Latin uppercase letter> ‘I’、‘J 之一開頭的類值’,‘K’,‘L’,‘M’,‘N’,‘O’,‘P’,‘Q’,‘R’,‘S’,‘T’,‘U’,‘V’, “W”、“X”、“Y”或“Z”保留用於實現定義的異常條件,稱為實現定義的類。除了 ‘000’ 之外的所有子類值,這意味著沒有子類,與這些類關聯的是保留用於實現定義的條件,並稱為實現定義的子類沒有數據

如果您的異常與 PostgreSQL 文件附錄 A 中的 SQLSTATE 之一匹配,則只需使用該 SQLSTATE。

如果您需要使用自己的 SQLSTATE,讓它以5to9Ito中的任何一個開頭Z

如果您需要定義自定義警告,請使用以to或to開頭01且第三個字元為任何一個的 SQLSTATE 。5``9``I``Z

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