Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Avance rapide | Suivant |
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 ]
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
.)
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.
Le nom (pouvant �tre qualifi� avec le nom du sch�ma) de la s�quence � cr�er.
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.
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.
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.
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.
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.
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.
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�.
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;
CREATE SEQUENCE est sp�cifi�e en SQL:2003. PostgreSQL se conforme au standard avec les exceptions suivantes :
L'expression AS <type_donn�es> n'est pas support�e.
Obtenir la prochaine valeur est possible en
utilisant la fonction nextval()
au lieu de l'expression
NEXT VALUE FOR du standard.
Pr�c�dent | Sommaire | Suivant |
CREATE SCHEMA | Niveau sup�rieur | CREATE TABLE |