Bonjour à tous,
Pour faire simple, j'ai une table avec des données que j'ordonne via un champ "mon_index" unique (qui n'est pas clé primaire de la table). Ce champ contient donc des valeurs consécutives.
Je souhaite déplacer des éléments, et reconstruire le champ "mon_index".
Exemple:
J'ai dans ma table les valeurs 1,2,3,4,5,6,7,8,9,10 et je souhaite prendre la ligne "9" et l'insérer entre la "2" et la "3"
1) J'attribue à la ligne "9" une valeur qui 'est jamais utilisée "-100"
2) Je décale les lignes 3 à 8 de 1 cran
3) je réattribue à ma ligne "-100" la valeur "3"
Sur la papier ça fonctionne, le problème est à l'étape (2) ou j'effectue un UPDATE:
J’exécute cette requête sur mon jeu de données (-100,1,2,3,4,5,6,7,8,10) et cette requête me renvoi "la valeur d'une clé dupliquée rompt la contrainte unique « uk_XXXXXX ». ".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UPDATE matable SET mon_index = (mon_index+1) WHERE mon_index >= 3 AND mon_index < 9
Je suppose que c'est parce que la requête s’exécute ligne par ligne, et qu'a un moment il y a une valeur dupliquée?
N'y a t'il pas moyen d’exécuter la requête "en une fois", et de vérifier la contrainte d'unicité qu'après exécution?
Je ne sais pas si je suis très clair! Mes tables sont un peu plus complexe, j'ai essayer de simplifier au maximum pour illustrer mon cas.
Pour info, je suis sous PostgreSQL 8.4
Merci d'avance pour votre retour!
Partager