如何从错误消息中确定 PostgreSQL 错误代码

How to determine PostgreSQL Error Codes from error message

在 PL/pgSQL 函数中,我想捕获一个错误。例如,当我将文本转换为数字时,出现错误(我在 psql 中 运行,但在 Postico GUI 客户端中出现相同的错误):

select 'a'::numeric;

ERROR:  invalid input syntax for type numeric: "a"
LINE 1: select 'a'::numeric;
               ^

为了trap this error,我做了一个这样的例外条款:

CREATE OR REPLACE FUNCTION public.to_number(input text) RETURNS numeric
    AS $$
BEGIN
    RETURN input::numeric;
EXCEPTION
    WHEN OTHERS THEN 
        RETURN NULL;
END
$$
    LANGUAGE plpgsql
    IMMUTABLE
    RETURNS NULL ON NULL INPUT
;

但是,我不喜欢这个条件 WHEN OTHERS

如何将错误消息 ERROR: invalid input syntax for type numeric: "a" 映射到 Appendix A. PostgreSQL Error Codes 中提到的消息?

我想在转换为numeric时捕获转换错误,没有其他条件(因为上面的函数是一个简化的函数)。

我觉得我错过了什么,但是什么?

当您在 psql 中遇到错误时,运行

\errverbose

你会得到像

这样的信息
ERROR:  22P02: invalid input syntax for type numeric: "a"
LINE 1: select 'a'::numeric;
               ^
LOCATION:  set_var_from_str, numeric.c:6856

22P02 是 SQLSTATE,文档的附录 A 将告诉您那是 invalid_text_representation