Как upsert несколько строк в PostgreSQL
Я пытаюсь написать такой запрос в PostgreSQL 9.5.2:
INSERT INTO a (id, x)
SELECT id, x FROM b
ON CONFLICT (id) DO UPDATE
SET x = b.x
WHERE b.y < 100
Но я получаю ERROR: missing FROM-clause entry for table "b"
. Должно быть, я упустил что-то основное, но как я могу ссылаться на строку, вставляемую в предложение UPDATE? Или есть какой-то другой способ?
1 ответ:
Конфликтующие значения доступны через
excluded
псевдоним:INSERT INTO a (id, x) SELECT id, x FROM b ON CONFLICT (id) DO UPDATE SET x = excluded.x;