IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

9.16. Fonctions de manipulation de s�quences

Cette section d�crit les fonctions de PostgreSQL™ op�rant sur les objets de s�quence. Les objets de s�quence (aussi appel�s g�n�rateurs de s�quence ou simplement s�quences) sont des tables sp�ciales, mono-lignes, cr��es avec la commande CREATE SEQUENCE(7). Une s�quence est habituellement utilis�e pour engendrer des identifiants uniques de lignes d'une table. Les fonctions de s�quence, list�es dans le Tableau 9.40, � Fonctions s�quence �, fournissent des m�thodes simples, et s�res en environnement multi-utilisateurs, d'obtention de valeurs successives � partir d'objets s�quence.

Tableau 9.40. Fonctions s�quence

Fonction Type de retour Description
currval(regclass) bigint Renvoie la valeur la plus r�cemment obtenue avec nextval pour la s�quence indiqu�e
lastval() bigint Renvoie la valeur la plus r�cemment obtenue avec nextval pour toute s�quence
nextval(regclass) bigint Incr�mente la s�quence et renvoie la nouvelle valeur
setval(regclass, bigint) bigint Positionne la valeur courante de la s�quence
setval(regclass, bigint, boolean) bigint Positionne la valeur courante de la s�quence et le drapeau is_called

La s�quence � traiter par l'appel d'une fonction de traitement de s�quences est identifi�e par un argument regclass, qui n'est autre que l'OID de la s�quence dans le catalogue syst�me pg_class. Il n'est toutefois pas n�cessaire de se pr�occuper de la recherche de cet OID car le convertisseur de saisie du type de donn�es regclass s'en charge. Il suffit d'�crire le nom de la s�quence entre guillemets simples, de fa�on � le faire ressembler � un libell�. Pour obtenir une compatibilit� avec la gestion des noms SQL ordinaires, la cha�ne est convertie en minuscules, sauf si le nom de la s�quence est entour� de guillemets doubles. Du coup :

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, au besoin, �tre qualifi� du nom du sch�ma :

nextval('mon_schema.foo')     op�re sur mon_schema.foo
nextval('"mon_schema".foo')   identique � ci-dessus
nextval('foo')                parcourt le chemin de recherche
pour trouver foo

Voir la Section 8.18, � Types identifiant d'objet � pour plus d'informations sur regclass.

[Note]

Note

Avant la version 8.1 de PostgreSQL™, les arguments des fonctions de traitement de s�quences �taient du type text, et non regclass. De ce fait, les conversions pr�c�demment d�crites d'une cha�ne de caract�res en valeur OID se produisaient � chaque appel. Pour des raisons de compatibilit�, cette fonctionnalit� existe toujours. Mais, en interne, un transtypage implicite est effectu� entre text et regclass avant l'appel de la fonction.

Lorsque l'argument d'une fonction de traitement de s�quences est �crit comme une simple cha�ne de caract�res, il devient une constante de type regclass. Puisqu'il ne s'agit que d'un OID, il permet de suivre la s�quence originelle m�me en cas de renommage, changement de sch�ma... Ce principe de � lien fort � est en g�n�ral souhaitable lors de r�f�rences � la s�quence dans les vues et valeurs par d�faut de colonnes. Un � lien faible � est g�n�ralement souhait� lorsque la r�f�rence � la s�quence est r�solue � l'ex�cution. Ce comportement peut �tre obtenu en for�ant le stockage des constantes sous la forme de constantes text plut�t que regclass :

nextval('foo'::text)      foo est recherch� � l'ex�cution

Le lien faible est le seul comportement accessible dans les versions de PostgreSQL™ ant�rieures � 8.1. Il peut donc �tre n�cessaire de le conserver pour maintenir la s�mantique d'anciennes applications.

L'argument d'une fonction de traitement de s�quences peut �tre une expression ou une constante. S'il s'agit d'une expression textuelle, le transtypage implicite impose une recherche � l'ex�cution.

Les fonctions s�quence disponibles sont :

nextval

Avance l'objet s�quence � sa prochaine valeur et renvoie cette valeur. Ce fonctionnement est atomique : m�me si de multiples sessions ex�cutent nextval concurrentiellement, chacune obtient sans risque une valeur de s�quence distincte.

Si un objet s�quence a �t� cr�� avec les param�tres par d�faut, les appels � nextval sur celui-ci renvoient des valeurs successives � partir de 1. D'autres comportements peuvent �tre obtenus en utilisant des param�tres sp�ciaux de la commande CREATE SEQUENCE(7) ; voir la page de r�f�rence de la commande pour plus d'informations.

[Important]

Important

Pour �viter le blocage de 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 la valeur r�cup�r�e, elle est consid�r�e utilis�e, m�me si la transaction qui ex�cute nextval avorte par la suite. Cela signifie que les transactions annul�es peuvent laisser des � trous � inutilis�s dans la s�quence des valeurs assign�es.

currval

Renvoie la valeur la plus r�cemment retourn�e par nextval pour cette s�quence dans la session courante. (Une erreur est rapport�e si nextval n'a jamais �t� appel�e pour cette s�quence dans cette session.) Parce qu'elle renvoie une valeur locale � la session, la r�ponse est pr�visible, que d'autres sessions aient ex�cut� ou non la fonction nextval apr�s la session en cours.

lastval

Renvoie la valeur la plus r�cemment retourn�e par nextval dans la session courante. Cette fonction est identique � currval, sauf qu'au lieu de prendre le nom de la s�quence comme argument, elle r�cup�re la valeur de la derni�re s�quence utilis�e par nextval dans la session en cours. Si nextval n'a pas encore �t� appel�e dans la session en cours, un appel � lastval produit une erreur.

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 pr�cis�e et initialise le champ is_calledtrue, signifiant que le prochain nextval avance la s�quence avant de renvoyer une valeur. La valeur renvoy�e par currval est aussi configur� � la valeur indiqu�e. Dans la forme � trois param�tres, is_called peut �tre initialis� � true ou � false. true a le m�me effet que la forme � deux param�tres. Positionn� � false, le prochain nextval retourne exactement la valeur indiqu�e et l'incr�mentation de la s�quence commence avec le nextval suivant. De plus, la valeur indiqu�e par currval n'est pas modifi�e dans ce cas. (Il s'agit d'une modification du comportement des versions ant�rieures � la 8.3.) Par exemple,

SELECT setval('foo', 42);           Le nextval suivant retourne 43
SELECT setval('foo', 42, true);     Comme ci-dessus
SELECT setval('foo', 42, false);    Le nextval suivant retourne 42

Le r�sultat renvoy� par setval est la valeur du second argument.

[Important]

Important

Comme les s�quences sont non transactionnelles, les modifications r�alis�es par setval ne sont pas annul�es si la transaction est annul�e.

Si un objet s�quence a �t� cr�� avec les param�tres par d�faut, les appels � nextval sur celui-ci renvoient des valeurs successives � partir de 1. D'autres comportements peuvent �tre obtenus en utilisant des param�tres sp�ciaux de la commande CREATE SEQUENCE(7) ; voir la page de r�f�rence de la commande pour plus d'informations.

[Important]

Important

Pour �viter le blocage de 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 la valeur r�cup�r�e, elle est consid�r�e utilis�e, m�me si la transaction qui ex�cute nextval avorte par la suite. Cela signifie que les transactions annul�es peuvent laisser des � trous � inutilis�s dans la s�quence des valeurs assign�es. Les op�rations setval ne sont jamais annul�es non plus.