尝试执行如下查询时:
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'];
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
[42702] ERROR: column reference "channels" is ambiguous Position: 245
Run Code Online (Sandbox Code Playgroud)
它所指的通道的具体引用是 array_append 中的“通道”。
通道是 CITEXT[] 数据类型
您可能需要EXCLUDED在 set 语句中指定表。
SET channels = array_append(EXCLUDED.channels, 'a159d680-2f2e-4ba7-9498-484271ad0834')
Run Code Online (Sandbox Code Playgroud)
使用该ON CONFLICT DO UPDATE子句时,由于冲突而未插入的值存储在EXCLUDED表中。它是一个临时表,您不必实际制作,方式NEW和OLD触发器中。
conflict_action 指定替代 ON CONFLICT 操作。它可以是 DO NOTHING 或 DO UPDATE 子句,指定在发生冲突时要执行的 UPDATE 操作的确切细节。ON CONFLICT DO UPDATE 中的 SET 和 WHERE 子句可以使用表名(或别名)访问现有行,并使用特殊排除表访问建议插入的行。目标表中读取相应排除列的任何列都需要 SELECT 权限。
请注意,所有每行 BEFORE INSERT 触发器的影响都反映在排除值中,因为这些影响可能导致行被排除在插入之外。
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |