如何从错误消息中确定 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
。
在 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
。