Můžete se podívat na systémový sloupec xmax
abych poznal rozdíl. Je to 0
pro vložené řádky v tomto případě.
CREATE TABLE tbl(id int PRIMARY KEY, col int);
INSERT INTO tbl VALUES (1, 1);
INSERT INTO tbl(id, col)
VALUES (1,11), (2,22)
ON CONFLICT (id) DO UPDATE
SET col = EXCLUDED.col
RETURNING *, (xmax = 0) AS inserted;
To je založeno na nezdokumentovaných podrobnostech implementace, které se mohou v budoucích verzích změnit (i když nepravděpodobné). Funguje pro Postgres 9.5 a 9.6.
Krása toho:nemusíte zavádět další sloupce.
Podrobné vysvětlení:
- PostgreSQL Upsert rozlišuje vložené a aktualizované řádky pomocí systémových sloupců XMIN, XMAX a dalších