Как 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 8

1 ответ:

Конфликтующие значения доступны через excluded псевдоним:

INSERT INTO a (id, x)
SELECT id, x 
FROM b
ON CONFLICT (id) DO UPDATE
    SET x = excluded.x;