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

PostgreSQL INSERT ON CONFLICT UPDATE (upsert) utilise toutes les valeurs exclues

Postgres n'a pas implémenté d'équivalent à INSERT OR REPLACE . Depuis le ON CONFLICT docs (c'est moi qui souligne):

Il peut s'agir soit de DO NOTHING, soit d'une clause DO UPDATE spécifiant les détails exacts de l'action UPDATE à effectuer en cas de conflit.

Bien qu'il ne vous donne pas de raccourci pour le remplacement, ON CONFLICT DO UPDATE s'applique plus généralement, car il vous permet de définir de nouvelles valeurs basées sur des données préexistantes. Par exemple :

INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;