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



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

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

为了捕获这个错误,我制作了一个EXCEPTION子句,如下所示:

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"映射到附录A.PostgreSQL错误代码中提到的错误消息?

我想在转换为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

最新更新