U kunt kijken in de systeemkolom xmax
om het verschil te vertellen. Het is 0
voor ingevoegde rijen in dit geval.
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;
Dit bouwt voort op een ongedocumenteerd implementatiedetail dat in toekomstige releases zou kunnen veranderen (zelfs als het onwaarschijnlijk is). Het werkt voor Postgres 9.5 en 9.6.
Het mooie ervan:u hoeft geen extra kolommen in te voeren.
Gedetailleerde uitleg:
- PostgreSQL Upsert maakt onderscheid tussen ingevoegde en bijgewerkte rijen met behulp van systeemkolommen XMIN, XMAX en andere