我有一个基本的Upsert查询,可以正常运行:
insert into table (id, data) values (1, '<data_string>')
on conflict (id) do update set data='<data_string>';
唯一的问题是我需要通过网络进行大量此类查询,所以我想知道是否有一种方法可以通过不在查询中列出两次<data_string>
来将流量减少一半?
答案 0 :(得分:2)
是的,有一个特殊的表EXCLUDED
用于此目的:
INSERT INTO tbl (id, data)
VALUES (1, '<data_string>')
ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data;
请注意,特殊的
excluded
表用于引用最初建议用于插入的值:
也适用于多行INSERT:
INSERT INTO tbl (id, data)
VALUES (1, '<data_string1>')
, (2, '<data_string2>')
, (3, '<data_string3>')
ON CONFLICT (id) DO UPDATE
SET data = EXCLUDED.data;