Możesz spojrzeć na kolumnę systemową xmax
odróżnić. To 0
w tym przypadku dla wstawionych wierszy.
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;
Opiera się to na nieudokumentowanych szczegółach implementacji, które mogą ulec zmianie w przyszłych wydaniach (nawet jeśli jest to mało prawdopodobne). Działa z Postgresem 9.5 i 9.6.
Piękno tego:nie musisz wprowadzać dodatkowych kolumn.
Szczegółowe wyjaśnienie:
- PostgreSQL Upsert rozróżnia wstawione i zaktualizowane wiersze za pomocą kolumn systemowych XMIN, XMAX i innych