Postgres UPSERT повторно использует значения столбца из INSERT в UPDATE - PullRequest
0 голосов
/ 06 октября 2018

У меня есть базовый запрос upsert, который работает нормально:

insert into table (id, data) values (1, '<data_string>') 
    on conflict (id) do update set data='<data_string>';

Единственная проблема заключается в том, что мне нужно выполнить много таких запросов по сети, поэтому мне интересно, есть ли способ сократить трафик вполовина, если <data_string> не указан в запросе дважды?

1 Ответ

0 голосов
/ 06 октября 2018

Да, для этой цели существует специальная таблица EXCLUDED:

INSERT INTO tbl (id, data)
VALUES (1, '<data_string>') 
ON CONFLICT (id) DO UPDATE SET data = <b>EXCLUDED.</b>data;

Как и , в инструкции объясняется :

Обратите внимание, что специальнаяТаблица excluded используется для ссылки на значения, изначально предложенные для вставки:

Работает также для многострочных вставок:

INSERT INTO tbl (id, data)
VALUES (1, '<data_string1>') 
     , (2, '<data_string2>') 
     , (3, '<data_string3>') 
ON CONFLICT (id) DO UPDATE
SET data = EXCLUDED.data;
...