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

PostgreSQL 14存储过程插入JSON数据报错:列'code'不存在

PostgreSQL存储过程JSON插入报错:column "code" does not exist 解决方法

错误根源是你引用JSON对象键时的语法错误:jsnBranch->>code里的code会被PostgreSQL当作数据库列名解析,而非JSON的键名,因此触发“column 'code' does not exist”错误。

修正后的存储过程代码,只需把JSON键名用单引号包裹:

CREATE OR REPLACE PROCEDURE sp_insert_or_update_branch(jsnBranch JSONB, jsnSqlRes OUT JSON) AS $$
    DECLARE
        objSpOutRes TYP_SP_OUT_RES;
        objFnCheckRes TYP_FN_CHECK_RES;
    BEGIN
            INSERT INTO organization.tbl_branch
        (fk_company_id, vhr_branch_code, vhr_branch_name, ars_product_ids)
        VALUES(1, jsnBranch->>'code', jsnBranch->>'name', '{1}'); -- 给JSON键名添加单引号
        
        --COMMIT;
        objSpOutRes.binSqlPk := 1::BIGINT;
        objSpOutRes.sinSqlCustomStatus := 1::SMALLINT;
        objSpOutRes.strSqlCustomStatusCode := 'SUCCESS';
        objSpOutRes.strSqlCustomMessage := 'Branch Saved';

        SELECT * FROM  fn_convert_type_out_object_to_out_json(objSpOutRes) INTO jsnSqlRes;
        RAISE NOTICE 'jsnSqlRes: %', jsnSqlRes;
    END;
$$ LANGUAGE plpgsql;

补充说明

PostgreSQL中,->>操作符用于提取JSON对象的文本值,后面必须跟带单引号的字符串字面量作为键名。如果不加单引号,PostgreSQL会尝试将其识别为数据库中的标识符(如表列名),这就是报错的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:54:18