Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 9. Fonctions et opérateurs | Avance rapide | Suivant |
Cette section décrit les fonctions de PostgreSQL pour opérer sur les objets de séquence. Les objets de séquence (aussi appelés des générateurs de séquence ou simplement des séquences) sont des tables spéciales à ligne seule créées avec la commande CREATE SEQUENCE. Un objet séquence est habituellement utilisé pour générer des identifiants uniques pour les lignes d'une table. Les fonctions de séquence, listées dans Tableau 9-34, fournissent des méthodes simples et saines avec des utilisateurs multiples pour obtenir des valeurs de séquences successives à partir de l'objet séquence.
Tableau 9-34. Fonctions séquence
Fonction | Type de retour | Description |
---|---|---|
nextval (text) | bigint | Avance la séquence et renvoie la nouvelle valeur |
currval (text) | bigint | Valeur de retour obtenu le plus récemment avec
nextval |
setval (text,
bigint) | bigint | Initialise la valeur courante de la séquence |
setval (text,
bigint, boolean) | bigint | Initialise la valeur courante de la séquence et le drapeau is_called |
Pour des raisons largement historiques, la séquence à utiliser sur l'appel de la fonction séquence est spécifiée par un argument de type texte. Pour achever quelques compatibilité avec la gestion de noms SQL ordinaires, les fonctions séquence convertissent leur arguments en minuscule sauf si la chaîne est entre des guillemets doubles. Donc,
nextval('foo') opère sur la séquence foo nextval('FOO') opère sur la séquence foo nextval('"Foo"') opère sur la séquence Foo
Le nom de la séquence peut être qualifié avec le schéma si nécessaire :
nextval('mon_schema.foo') opère sur mon_schema.foo nextval('"mon_schema".foo') identique à ci-dessus nextval('foo') cherche dans le chemin de recherche pour foo
Bien sûr, l'argument texte peut être le résultat d'une expression, pas seulement un simple littéral, qui est utile occasionellement.
Les fonctions séquence disponibles sont :
nextval
Avance l'objet séquence à sa prochaine valeur et renvoie cette valeur.
Ceci se fait de façon atomique : même si les sessions multiples
exécutent nextval
de façon concurrente, chacun va
recevoir proprement une valeur de séquence distincte.
currval
Renvoie la valeur la plus récemment obtenue par
nextval
pour cette séquence dans la session
actuelle. (Une erreur est rapportée si nextval
n'a
jamais été appelé pour cette séquence dans cette session.) Notez que,
parce qu'il renvoie une valeur locale à la session, il donne une
réponse prévisible même si les autres sessions exécutent
nextval
entre temps.
setval
Réinitialise la valeur du compteur de l'objet séquence. La forme avec
deux paramètres initialise le champ last_value de la
séquence à la valeur spécifiée et initialise le champ
is_called à true, signifiant que
le prochain nextval
avancera la séquence avant de
renvoyer une valeur. Dans la forme à trois paramètres,
is_called pourrait être initialisé soit à
true soit à false. S'il est
initialisé à false, le prochain
nextval
retournera exactement la valeur spécifiée
et l'avancement de la séquence commence avec le
nextval
suivant. Par exemple,
SELECT setval('foo', 42); Le prochainnextval
renverra 43 SELECT setval('foo', 42, true); Identique à ci-dessus SELECT setval('foo', 42, false); Le prochainnextval
renverra 42
Le résultat renvoyé par setval
est juste la valeur
du second argument.
Important : Pour éviter le blocage des transactions concurrentes qui obtiennent des nombres de la même séquence, une opération
nextval
n'est jamais annulée ; c'est-à-dire qu'une fois que la valeur a été récupérée, elle est considérée utilisée, même si la transaction qui annule lenextval
après. Ceci signifie que les transactions annulées pourraient laisser des << trous >> inutilisés dans la séquence des valeurs assignées. Les opérationssetval
ne sont jamais annulées.
Si un objet séquence a été créé avec les paramètres par défaut, les
appels à nextval
sur celui-ci renverront les valeurs
successives à partir de 1. D'autres comportements peuvent être obtenus en
utilisant des paramètres spéciaux de la commande CREATE SEQUENCE ; voir la page de référence de la commande
pour plus d'informations.
Précédent | Sommaire | Suivant |
Fonctions pour le type des adresses réseau | Niveau supérieur | Expressions conditionnelles |