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

Erreur de syntaxe dans le code de test UPSERT

Comme il s'agit du meilleur résultat Google pour l'erreur :

ON CONFLICT DO UPDATE command cannot affect row a second time

J'ajouterai que cela peut être causé par un conflit en double VALUES , par exemple

INSERT INTO distributors (did, dname)
VALUES 
    (5, 'Gizmo Transglobal'), 
    (5, 'Associated Computing, Inc')
ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname;

Dans ce cas, nous essayons d'insérer deux valeurs avec dim mis à 5 . Comme dim est l'index qu'il ne peut pas y avoir de conflit dans la requête elle-même.

J'ai rencontré cette erreur lors de la mise en œuvre du microservice et du traitement des demandes, certaines d'entre elles ayant des enregistrements en double.