Anda dapat melihat pada kolom sistem xmax
untuk membedakannya. Ini 0
untuk baris yang disisipkan dalam kasus ini.
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;
Ini dibangun di atas detail implementasi tidak berdokumen yang mungkin berubah di rilis mendatang (bahkan jika tidak mungkin). Ini berfungsi untuk Postgres 9.5 dan 9.6.
Keindahannya:Anda tidak perlu menambahkan kolom tambahan.
Penjelasan detail:
- PostgreSQL Upsert membedakan baris yang disisipkan dan diperbarui menggunakan kolom sistem XMIN, XMAX, dan lainnya