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

INSERT INTO ON CONFLICT中excluded的工作原理及相关疑问

关于PostgreSQL UPSERT语句的疑问解答

你的SQL语句:

INSERT INTO PUBLIC.TABLE_A (id, user, active, last_login) --The ID column is the primary key
SELECT
     b.id, b.user, b.active, b.last_login
FROM
     PUBLIC.TABLE_B as B
ON CONFLICT ON CONSTRAINT ID_PKEY 
DO UPDATE
     user = excluded.user,
     active = excluded.active,
     last_login = excluded.last_login

疑问解答:

  1. 赋值语句中的user、active、last_login是否来自PUBLIC.TABLE_A?
    是。在DO UPDATE块中,直接写列名默认指代目标表(也就是PUBLIC.TABLE_A)的对应列。你当前的写法和PUBLIC.TABLE_A.user = excluded.user完全等价,PostgreSQL会自动关联目标表的字段。

  2. excluded.user、excluded.active、excluded.last_login是否完全等同于来自PUBLIC.TABLE_B的记录?
    是。excluded是PostgreSQL处理冲突时生成的虚拟表,它存储的是原本要插入到TABLE_A的那条记录——也就是从TABLE_B查询出来的对应行数据。所以excluded中的字段值和TABLE_B里被选中的那一行的对应字段值完全一致。

内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:24:52