PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres upsert :faire la distinction entre les lignes nouvelles et mises à jour

Il existe un moyen sans ajouter de colonne à votre tableau :

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;

Explication :