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

标签 postgresql plpgsql

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

select 'a'::numeric;

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

收件人trap this error ,我做了一个这样的异常(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" 映射到 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

关于postgresql - 如何从错误消息中确定 PostgreSQL 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70078486/

相关文章:

postgresql - 用于向 Postgres DB 批量插入的 Azure 持久功能

postgresql - 连接 : connection timed out

postgresql - 在 PL/pgsql 中使用 EXECUTE 从通用触发器插入 NEW.*

arrays - 创建声明预定义文本数组的函数

sql - Postgresql创建函数错误

Django 1.10 跨多个字段的全文搜索。如何获得不同的记录?

sql - 什么时候需要在PostgreSQL中创建索引?

sql - 如何在postgresql中为可选参数编​​写函数?

postgresql - Postgres 查找数据库表中与给定列上的条件匹配的所有行

PostgreSQL 在触发器函数中动态修改新记录中的字段