CREATE SEQUENCE

Nom

CREATE SEQUENCE -- d�finit un nouveau g�n�rateur de s�quence

Synopsis

CREATE [ TEMPORARY | TEMP ] SEQUENCE nom [ INCREMENT [ BY ] incr�ment ]
    [ MINVALUE valeurmin | NO MINVALUE ]
    [ MAXVALUE valeurmax | NO MAXVALUE ]
    [ START [ WITH ] d�but ]
    [ CACHE cache ]
    [ [ NO ] CYCLE ]

Description

CREATE SEQUENCE cr�e un nouveau g�n�rateur du num�ro de s�quence. Ceci implique la cr�ation et l'initialisation d'une nouvelle table � une seule ligne avec le nom nom. Le g�n�rateur appartiendra � l'utilisateur ex�cutant la commande.

Si un nom de sch�ma est donn�, alors la s�quence est cr��e dans le sch�ma sp�cifi�. Sinon, elle est cr��e dans le sch�ma courant. Des s�quences temporaires existent dans un sch�ma sp�cial, donc un nom de sch�ma pourrait ne pas �tre donn� lors de la cr�ation d'une s�quence temporaire. Le nom de s�quence doit �tre distinct du nom de tout autre s�quence, table, index ou vue dans le m�me sch�ma.

Apr�s la cr�ation d'une s�quence, vous utilisez les fonctions nextval, currval et setval pour op�rer sur la s�quence. Ces fonctions sont document�es dans Section 9.12.

Bien que vous ne pouvez pas mettre � jour directement une s�quence, vous pouvez utiliser une requ�te comme

SELECT * FROM nom;

pour examiner les param�tres et l'�tat courant d'une s�quence. En particulier, le champ last_value de la s�quence affiche la derni�re valeur allou�e par une session. (Bien s�r, cette valeur pourrait �tre obsol�te au moment o� elle est appel�e si d'autres sessions lancent des appels de nextval.)

Param�tres

TEMPORARY ou TEMP

Si sp�cifi�e, l'objet de s�quence est cr�� seulement pour cette session et est automatiquement supprim� lors de la sortie de la session. Les s�quences existantes permanentes avec le m�me nom ne sont pas visibles (dans cette session) alors que la s�quence temporaire existe, sauf si elles sont r�f�renc�es avec les noms qualifi�s du sch�ma.

nom

Le nom (pouvant �tre qualifi� avec le nom du sch�ma) de la s�quence � cr�er.

incr�ment

La clause optionnelle INCREMENT BY incr�ment sp�cifie la valeur ajout�e � la valeur de la s�quence courante pour cr�er une nouvelle valeur. Une valeur positive cr�era une s�quence ascendante, une n�gative en cr�era une descendante. La valeur par d�faut est 1.

valeurmin
NO MINVALUE

La clause optionnelle MINVALUE valeurmin d�termine la valeur minimale qu'une s�quence peut g�n�rer. Si cette clause n'est pas fournie ou si NO MINVALUE est sp�cifi�, alors les valeurs par d�faut seront utilis�es. Les valeurs par d�faut sont 1 et -263-1 pour les s�quences respectivement ascendantes et descendantes.

valeurmax
NO MAXVALUE

La clause optionnelle MAXVALUE valeurmax d�termine la valeur maximale pour la s�quence. Si cette clause n'est pas fournie ou si NO MAXVALUE est specifi�, alors les valeurs par d�faut seront utilis�es. Les valeurs par d�faut sont 263-1 et -1 pour les s�quences respectivement ascendantes et descendantes.

d�but

La clause optionnelle START WITH d�but autorise la s�quence � commencer quelque part. La valeur de d�but par d�faut est valeurmin pour les s�quences ascendantes et valeurmax pour les s�quences descendantes.

cache

La clause optionnelle CACHE cache sp�cifie comment les num�ros de s�quence doivent �tre pr�allou�s et stock�s en m�moire pour un acc�s plus rapide. La valeur minimale est 1 (seule une valeur peut �tre g�n�r�e � un moment, c'est-�-dire pas de cache), et c'est aussi la valeur par d�faut.

CYCLE
NO CYCLE

L'option CYCLE autorise la s�quence � recommencer au d�but lorsque valeurmax ou valeurmin a �t� atteinte par une s�quence respectivement ascendante ou descendante. Si la limite est atteinte, le prochain nombre g�n�r� sera respectivement valeurmin ou valeurmax.

Si NO CYCLE est sp�cifi�, tout appel � nextval apr�s que la s�quence est atteint la valeur minimale renverra une erreur. Si ni CYCLE ni NO CYCLE ne sont sp�cifi�s, NO CYCLE est la valeur par d�faut.

Notes

Utilisez DROP SEQUENCE pour supprimer une s�quence.

Les s�quences sont bas�es sur l'arithm�tique bigint, donc l'�chelle ne peut pas exc�der l'�chelle d'un entier sur huit octets (-9223372036854775808 � 9223372036854775807). Sur certaines vieilles plateformes, il pourrait ne pas y avoir de support du compilateur pour les entiers sur huit octets, auquel cas les s�quences utilisent l'arithm�tique des entiers (type integer) habituels (allant de -2147483648 � +2147483647).

Des r�sultats inattendus pourraient �tre obtenus si un param�trage de cache plus grand que un est utilis� pour un objet s�quence qui sera utilis� en concurrence par plusieurs s�quences. Chaque session allouera du cache et des valeurs de s�quences successives lors d'un acc�s � l'objet s�quence et augmentera la valeur de last_value en concordance. Ensuite, les utilisations prochaines de cache-1 dans cette session renverront simplement les valeurs pr�allou�es sans toucher � l'objet s�quence. Donc, tout nombre allou� mais non utilis� dans une session sera perdu lorsque la session se termine, causant des <<�trous�>> dans la s�quence.

De plus, bien que de nombreuses sessions sont garanties pour allouer des valeurs de s�quences distinctes, les valeurs pourraient �tre g�n�r�es en dehors de la s�quence lorsque toutes les sessions sont consid�r�es. Par exemple, avec un param�trage du cache � 10, la session A pourrait r�server des valeurs 1..10 et renvoyer nextval=1, alors la session B pourrait r�server des valeurs 11..20 et renvoyer nextval=11 avant que la session A ait g�n�r� nextval=2. Du coup, avec un param�trage de cache de un, il est sain d'assumer que les valeurs nextval sont g�n�r�es s�quentiellement ; avec un param�trage cache plus grand que un, vous devriez seulement assumer que les valeurs nextval sont tous distinctes, et non pas qu'elles soient g�n�r�es purement s�quentiellement. De plus, last_value refl�tera la derni�re valeur r�serv�e par toute session, qu'il ne soit ou non pas encore renvoy� par nextval.

Une autre consid�ration est qu'un setval ex�cut� sur une telle s�quence ne sera pas notifi�e pour les autres sessions jusqu'� ce qu'ils aient utilis� des valeurs pr�allou�es qu'ils ont cach�.

Exemples

Cr�er une s�quence ascendante appel�e serie, commen�ant � 101 :

CREATE SEQUENCE serie START 101;

S�lectionner le prochain num�ro � partir de cette s�quence :

SELECT nextval('serie');
    
 nextval
---------
     114

Utiliser cette s�quence dans une commande INSERT :

INSERT INTO distributors VALUES (nextval('serie'), 'nothing');

Mettre � jour la valeur de la s�quence apr�s un COPY FROM :

BEGIN;
COPY distributeurs FROM 'fichier_entrees';
SELECT setval('serie', max(id)) FROM distributeurs;
END;

Compatibilit�

CREATE SEQUENCE est sp�cifi�e en SQL:2003. PostgreSQL se conforme au standard avec les exceptions suivantes :