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

Posted

技术标签:

【中文标题】如何从错误消息中确定 PostgreSQL 错误代码【英文标题】:How to determine PostgreSQL Error Codes from error message 【发布时间】:2021-11-23 09:40:20 【问题描述】:

在 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时捕获转换错误,并且没有其他条件(因为上面的函数是一个简化的函数)。

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

【问题讨论】:

【参考方案1】:

当您收到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

【讨论】:

以上是关于如何从错误消息中确定 PostgreSQL 错误代码的主要内容,如果未能解决你的问题,请参考以下文章

如何从 API 请求中检索错误消息 [重复]

错误:无法从“10.4”确定 PostgreSQL 版本

如何通过 ODBC 在 Access 中获取详细的 PostgreSQL 错误?

PostgreSQL 迁移失败并出现错误消息“找不到驱动程序”

在SQL导入导出向导上接收错误

从批处理文件中确定闪存驱动器是不是存在而没有错误消息