尝试执行以下查询时:
INSERT INTO employee_channels (employee_id, channels)
VALUES ('46356699-bed1-4ec4-9ac1-76f124b32184', '{a159d680-2f2e-4ba7-9498-484271ad0834}')
ON CONFLICT (employee_id)
DO UPDATE SET channels = array_append(channels, 'a159d680-2f2e-4ba7-9498-484271ad0834')
WHERE employee_id = '46356699-bed1-4ec4-9ac1-76f124b32184'
AND NOT lower(channels::text)::text[] @> ARRAY['a159d680-2f2e-4ba7-9498-484271ad0834'];
我收到以下错误
[42702] ERROR: column reference "channels" is ambiguous Position: 245
它所引用的通道的具体引用是array_append内部的“通道”。
channels是CITEXT []数据类型
答案 0 :(得分:0)
您可能需要在set语句中指定EXCLUDED
表。
SET channels = array_append(EXCLUDED.channels, 'a159d680-2f2e-4ba7-9498-484271ad0834')
使用ON CONFLICT DO UPDATE
子句时,由于冲突而未插入的值将存储在EXCLUDED
表中。它是您不必实际创建的临时表,NEW
和OLD
的触发方式。
conflict_action指定另一种ON CONFLICT动作。它可以是DO NOTHING,也可以是指定确切的DO UPDATE子句 发生冲突时要执行的UPDATE操作的详细信息。 ON CONFLICT DO UPDATE中的SET和WHERE子句可以访问 使用表名(或别名)的现有行以及行 建议使用特殊排除表插入。选择 目标表中的任何列都需要特权,其中 读取相应的排除列。
请注意,INSERT触发器之前所有按行的影响均反映在排除的值中,因为这些影响可能已经 到从插入中排除的行。