如何在 PostgreSQL 中插入多行

How to upsert multiple rows in 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 子句中的行呢?或者有其他方法吗?

冲突的值可通过 excluded 别名获得:

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