9.11. Fonctions de manipulation de s�quence

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

FonctionType de retourDescription
nextval(text)bigintAvance la s�quence et renvoie la nouvelle valeur
currval(text)bigintValeur de retour obtenu le plus r�cemment avec nextval
setval(text, bigint)bigintInitialise la valeur courante de la s�quence
setval(text, bigint, boolean)bigintInitialise 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_calledtrue, 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 prochain nextval
renverra 43
SELECT setval('foo', 42, true);     Identique �
ci-dessus
SELECT setval('foo', 42, false);    Le prochain nextval
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 le nextval 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�rations setval 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.