Bonjour à tous !
J'ai une table "inscrit_en_ligne" qui possède un index avec une contrainte d'unicité sur la colonne "inscrit_en_ligne_inscrit_id". Il faut absolument éviter les doublons.
J'ai une fonction qui teste la présence d'un membre dans cette table. Si le membre est présent on fait un UPDATE dans le cas contraire, on fait un INSERT.
malheureusement j'ai souvent un message d'erreur dans mes logs qui dit qu'une clé dupliquée rompt la contrainte unique. Ce qui veut dire que mon test INSERT ou UPDATE ne fonctionne pas.
J'ai beau regardé ma fonction dans tous les sens je ne vois pas où est le problème. Je me décide donc à vous la soumettre car je n'ai peut-être plus la clairvoyance nécessaireERREUR: une cl? dupliqu?e rompt la contrainte unique << inscrit_en_ligne_idx_inscri_id >>\nCONTEXT
Voilà un extrait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 /* on verifie si l'inscrit est deja present dans la table inscrit_en_ligne */ SELECT INTO nb_lignes count(*) FROM inscrit_en_ligne WHERE inscrit_en_ligne_inscrit_id = $1 AND inscrit_en_ligne_inscrit_id_crypte = $2;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 IF nb_lignes != 0 THEN /* inscrit deja present dans la table inscrit_en_ligne */ /* maj */ UPDATE inscrit_en_ligne SET inscrit_en_ligne_date_connexion = $4 WHERE inscrit_en_ligne_inscrit_id = $1 AND inscrit_en_ligne_inscrit_id_crypte = $2; ELSIF nb_lignes = 0 THEN /* inscrit non present dans la table inscrit_en_ligne */ /* insertion */ INSERT INTO inscrit_en_ligne (inscrit_en_ligne_inscrit_id, inscrit_en_ligne_inscrit_id_crypte, inscrit_en_ligne_date_connexion) VALUES($1, $2, $4); END IF;
Voici un autre message d'erreur lié à cette fonction apparu ce matin :
Merci à tousERREUR: Bloquage d?tect?\nDETAIL: Le processus 12476 attend ShareLock sur transaction 426219146 ; bloqu? par le processus 12485.\nLe processus 12485 attend ShareLock sur transaction 426219132 ;
Partager