Postgres UPSERT 在 UPDATE 时重用 INSERT 中的列值
Postgres UPSERT reuse column values from INSERT on UPDATE
我有一个工作正常的基本更新插入查询:
insert into table (id, data) values (1, '<data_string>')
on conflict (id) do update set data='<data_string>';
唯一的问题是我需要通过网络发送大量此类查询,所以我想知道是否有办法通过不在查询中列出两次 <data_string>
来将流量减半?
是的,有特殊的tableEXCLUDED
的目的:
INSERT INTO tbl (id, data)
VALUES (1, '<data_string>')
ON CONFLICT (id) DO UPDATE SET data = <b>EXCLUDED.</b>data;
Note that the special excluded
table is used to reference values originally proposed for insertion:
也适用于多行 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;
我有一个工作正常的基本更新插入查询:
insert into table (id, data) values (1, '<data_string>')
on conflict (id) do update set data='<data_string>';
唯一的问题是我需要通过网络发送大量此类查询,所以我想知道是否有办法通过不在查询中列出两次 <data_string>
来将流量减半?
是的,有特殊的tableEXCLUDED
的目的:
INSERT INTO tbl (id, data)
VALUES (1, '<data_string>')
ON CONFLICT (id) DO UPDATE SET data = <b>EXCLUDED.</b>data;
Note that the special
excluded
table is used to reference values originally proposed for insertion:
也适用于多行 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;