【问题标题】:How to determine PostgreSQL Error Codes from error message如何从错误消息中确定 PostgreSQL 错误代码
【发布时间】: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时捕获转换错误,并且没有其他条件(因为上面的函数是一个简化的函数)。

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

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多