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

Postgres将临时表数据upsert到正式表时excluded字段报错如何解决

这是PostgreSQL标识符大小写规则导致的问题:

  • PostgreSQL默认会把所有未被双引号包裹的标识符自动转换为小写处理。只有创建字段时用双引号包裹保留了大写的字段,后续引用时也必须用双引号包裹才能正确匹配。
  • 你写的excluded.Field_A没有加双引号,PostgreSQL会自动解析为excluded.field_a,和你实际存在的大写字段名不匹配,因此报字段不存在的错误,提示里也明确建议你引用"excluded.Field_A"。

方案1:直接修改SQL语句

给excluded后的字段名加上双引号即可正常执行,修改后语句如下:

WITH moved_rows AS (
  DELETE FROM my_table_tmp a
  RETURNING a.*
)
INSERT INTO my_table
SELECT * FROM moved_rows
ON CONFLICT ("unique_id") DO
  UPDATE SET
    "Field_A" = excluded."Field_A",
    "Field_B" = excluded."Field_B",
    "Field_C" = excluded."Field_C"

方案2(推荐长期使用):统一字段名为小写

调用df.to_sql写入临时表前,先把DataFrame的列名全部转为小写,永久表也同步修改为小写字段名,后续写SQL时不需要额外处理双引号,可避免同类大小写问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:09:03