Les séquences dans PostgreSQL![]() ![]() Date de publication : 29/01/2005 , Date de mise a jour : 01/02/2005
Par
Damien Griessinger (HpAlpha)
Les séquences ?!? Mais qu'est ce donc ? Comment fonctionnent-elles ? Qu'est-ce que cela va nous apporter ? I. Que sont les séquences ? II. Pourquoi les utiliser ? III. Comment en créer une ? IV. Comment est composée une séquence ? V. Comment manipuler les séquences ? VI. Comment supprimer une séquence ? VII. Comment se comporte les séquences dans une transaction ? VIII. Documents de référence IX. Remerciements I. Que sont les séquences ?
Une séquence est une sorte de table particulière qui permet de générer un nombre proprement. Les nombres générés proviennent d'une suite que l'on aura au préalable paramétrée dans la séquence. Elle est habituellement utilisée pour générer des identifiants uniques pour les lignes d'une table, dans les autres SGBD on la connaît sous le nom de champ auto-incrémenté. Il peut exister une infinité de séquences au sein d'une même base de données. Chaque séquence a ses propres caractéristiques et la génération d'un nombre n'affecte pas les autres séquence de la base. Enfin une même table peut utiliser une ou plusieurs séquences différentes. II. Pourquoi les utiliser ?
Lorsque l'on développe une base, il est souvent nécessaire d'avoir recours à un nombre unique comme clef primaire par exemple, mais la gestion de ce nombre est plus complexe qu'il n'y paraît, en effet, il faut que la génération de ce nombre soit unique et ce, dans un environnement multi-utilisateurs. Ainsi, supposons qu'une centaine de clients tentent de récupérer un nombre exactement en même temps, ils doivent recevoir chacun un nombre différent. La séquence est une méthode sûre pour générer ces nombres. III. Comment en créer une ?C'est relativement simple :
Il existe de nombreuses options à cette commande, comme par exemple spécifier la valeur de départ (START 150), définir le pas d'incrément (INCREMENT 2), etc. Je vous invite à lire la documentation en référence à la fin de l'article
Une séquence est implicitement créée lorsque l'on déclare la création d'une table avec une colonne de type SERIAL. La colonne se transformera en type INTEGER mais aura une valeur par défaut à nextval('ma_sequence');
Un message d'information nous indique que le serveur a automatiquement créé une séquence (ma_table_idauto_seq)
De manière général, un SERIAL implique la création d'une séquence portant le nom de la table (ma_table) concaténée du nom du champ (idauto) et du suffixe _seq Ce qui donnera : ma_table_idauto_seq IV. Comment est composée une séquence ?Pour connaître le contenu d'une séquence il suffit de faire :
V. Comment manipuler les séquences ?
Changer la prochaine valeur à 123 :
Changer la valeur minimum à 10 :
Changer la valeur maximum à 600 :
Changer le pas de l'incrémentation à 7 :
Passer la séquence en cycle :
Créer une séquence avec les paramètres ci-dessous :
Il existe des fonctions pour manipuler les séquences : nextval, currval, setval
Exemple d'utilisation :
VI. Comment supprimer une séquence ?
Tout simplement avec la commande :
Si l'on tente de supprimer une séquence utilisée par une table, postgresql renvoi le message d'erreur suivant :
Postgres refuse tout simplement de supprimer la séquence car ma_table en a besoin. Cependant il nous indique que l'on peut supprimer la colonne idauto de la table. Lorsque l'on supprime la colonne, la séquence qui y était liée est automatiquement supprimée.
VII. Comment se comporte les séquences dans une transaction ?
Si dans notre transaction on utilise une séquence pour générer successivement plusieurs nombres, et qu'à la fin de la transaction on procède à un rollback, la séquence ne reviendra pas en arrière :
VIII. Documents de référence http://www.postgresql.org/docs/8.0/interactive/sql-createsequence.html http://www.postgresql.org/docs/8.0/interactive/functions-sequence.html http://www.postgresql.org/docs/8.0/interactive/sql-altersequence.html http://www.postgresql.org/docs/8.0/interactive/sql-dropsequence.htmlIX. Remerciements
Je souhaite remercier GrandFather pour son aide et ses observations.
|
Copyright © 2005 Damien Griessinger. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.
Copyright © 2000-2012 - www.developpez.com