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

PostgreSQL调用plpgsql函数报column reference "list" is ambiguous错误求助

报错根因

这个错误是因为在INSERT ... ON CONFLICT DO UPDATE的SQL解析上下文中,没有加限定前缀的list标识符存在歧义:PostgreSQL无法确定你要取的是orders_summary表中冲突行的原有list字段值,还是其他上下文的同名对象。你添加的#variable_conflict use_column是plpgsql层面的配置,仅用于解决plpgsql变量与表列同名时的冲突,无法处理SQL语句内部的标识符歧义问题。

修复方案

给所有DO UPDATE子句中引用的原表字段加上表名前缀orders_summary.,明确指定引用来源即可:

  • ARRAY_APPEND(list, input_list2)修改为ARRAY_APPEND(orders_summary.list, input_list2)
  • WHERE条件中的NOT list @> input_list修改为NOT orders_summary.list @> input_list
  • 同逻辑下amount字段也可加前缀避免潜在歧义
修复后的完整代码
CREATE OR REPLACE FUNCTION update_order(input_id uuid,input_sku text,input_store_id uuid,input_order_date bigint,input_asin text,input_amount int,input_list text[],input_price real,input_list2 text) RETURNS void LANGUAGE plpgsql AS
$body$
#variable_conflict use_column
BEGIN
    INSERT INTO orders_summary(id,sku,store_id,order_date,asin,amount,list,price)
            VALUES(input_id,input_sku,input_store_id,to_timestamp(input_order_date / 1000.0),input_asin,input_amount,input_list,input_price) ON CONFLICT(sku,order_date) DO UPDATE
              SET list = ARRAY_APPEND(orders_summary.list, input_list2),
                  amount = orders_summary.amount + input_amount,
                  price = input_price
              WHERE NOT orders_summary.list @> input_list;
END
$body$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:05