You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据PostgreSQL错误信息匹配官方错误码捕获特定异常

方法步骤

1. 查找错误对应的PostgreSQL错误码

你可以通过以下两种方式快速获取任意错误对应的SQLSTATE:

  • 在psql中执行命令调整错误输出详细程度:\set VERBOSITY verbose,之后再运行触发错误的语句select 'a'::numeric;,错误输出中会直接显示对应的错误码。
  • 也可以在PL/pgSQL异常块中通过内置变量SQLSTATE打印当前错误的编码。

你遇到的「文本转numeric类型语法无效」错误对应的SQLSTATE为22P02,对应预定义异常名为invalid_text_representation。

2. 调整函数异常捕获规则

将原来的WHEN OTHERS替换为对应错误码的捕获条件即可,如果你需要更严格的过滤,只捕获numeric相关的转换错误,可以额外结合错误信息判断,避免同错误码的其他类型转换错误被误捕获:

CREATE OR REPLACE FUNCTION public.to_number(input text) RETURNS numeric
    AS $$
BEGIN
    RETURN input::numeric;
EXCEPTION
    -- 仅捕获文本转类型无效的错误
    WHEN SQLSTATE '22P02' THEN
        -- 额外校验错误是否为numeric类型转换触发,不符合则重新抛出异常
        IF SQLERRM LIKE '%type numeric%' THEN
            RETURN NULL;
        ELSE
            RAISE;
        END IF;
END
$$
    LANGUAGE plpgsql
    IMMUTABLE
    RETURNS NULL ON NULL INPUT
;

也可以直接使用预定义的异常名代替硬编码的错误码,可读性更高:

EXCEPTION
    WHEN invalid_text_representation THEN
        -- 同上逻辑

内容的提问来源于stack exchange,提问作者doekman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:02