|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Bonjour,
J'aurais donc besoin d'un petit conseil : J'ai une table qui est du style : ma_table id SERIAL, nom TEXT UNIQUE NOT NULL J'ai remarqué que si un INSERT de nom échoue, l'id est tout de même incrémenté (du coup j'ai des gaps énormes entre 2 valeurs). Comment me conseilleriez-vous de gérer ceci ? Je pense soit : - gestion par la base: trigger avec fonction trigger mais je ne crois pas pouvoir interrompre un INSERT, et je ne peux pas agir sur la valeur d'un SERIAL (heureusement - par script: une fonction qui me renverrait un booléen selon l'existence du nom et je n'effectuerai l'INSERT que dans le cas de non existence En vous remerciant, C. Tobini |
|
|
00
|
|
|
#2 | ||||
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
En quoi le gap entre deux valeurs d'une même séquence est un problème ?
Sinon, pour le reste : Citation:
Citation:
Code :
|
||||
|
|
00
|
|
|
#3 | |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Bonjour et merci de la réponse,
Le gap n'est pas un problème. Mais un saut de 6 000 000 entre 2 entrées (surtout qu'il n'y en a que 10), je trouve ça assez peu élégant. Citation:
Pour le SERIAL, je préfère laisser gérer le système et ne pas trop jouer avec les séquences, elles sont là pour ça. Pour la fonction c'est quelque chose comme ça que je voyais, appeler une fonction SQL via le script. J'aimerais bien néanmois gérer si c'est possible par trigger, avant insertion. C. Tobini |
|
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
Un saut de 6000000 entre deux INSERT me paraît énorme. De quatre/cinq, je veux bien. De 6000000, j'ai un doute. Quel est le pas de ce trigger ? le meilleur moyen de le savoir est de lancer la requête suivante :
Pour l'annulation d'un trigger INSERT, oui, c'est possible. Il faut que le trigger soit de niveau ligne (et non pas instruction) et que ce soit un trigger BEFORE. Il convient simplement de renvoyer NULL pour que l'opération soit annulée. Ceci est aussi vrai pour un trigger UPDATE. Pour la fonction, c'était du PL/pgsql, donc pas forcément supportée sur la base utilisée. |
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Citation:
Citation:
C. Tobini |
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
En fait, la ligne renvoyée est la ligne insérée. Dans le cas où la procédure trigger renvoit NULL, cela annule l'opération (donc l'insertion).
|
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
OK merci, je vais tester cette solution !
Bon week-end, C. Tobini |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com