Можете да погледнете системната колона xmax
да кажа разликата. Това е 0
за вмъкнатите редове в този случай.
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;
Това се основава на недокументирани детайли за внедряване, които може да се променят в бъдещи издания (дори и малко вероятно). Работи за Postgres 9.5 и 9.6.
Красотата на това:не е необходимо да въвеждате допълнителни колони.
Подробно обяснение:
- PostgreSQL Upsert разграничава вмъкнатите и актуализираните редове с помощта на системни колони XMIN, XMAX и други