ALTER SEQUENCE — Modifier la définition d'un générateur de séquence
ALTER SEQUENCE [ IF EXISTS ]nom
[ AStype_donnee
] [ INCREMENT [ BY ]incrément
] [ MINVALUEvaleurmin
| NO MINVALUE ] [ MAXVALUEvaleurmax
| NO MAXVALUE ] [ START [ WITH ]début
] [ RESTART [ [ WITH ]nouveau_début
] ] [ CACHEcache
] [ [ NO ] CYCLE ] [ OWNED BY {nom_table
.nom_colonne
| NONE } ] ALTER SEQUENCE [ IF EXISTS ]nom
SET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]nom
OWNER TO {nouveau_propriétaire
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nom
RENAME TOnouveau_nom
ALTER SEQUENCE [ IF EXISTS ]nom
SET SCHEMAnouveau_schéma
ALTER SEQUENCE
modifie les paramètres d'un générateur de
séquence. Tout paramètre non précisé dans la commande ALTER
SEQUENCE
conserve sa valeur précédente. Pour modifier le
propriétaire, vous devez aussi être un membre direct ou indirect du nouveau
rôle propriétaire, et ce rôle doit avoir le droit CREATE
sur le schéma de la séquence (ces restrictions permettent de s'assurer que
modifier le propriétaire ne fait rien de plus que ce que vous pourriez faire
en supprimant puis recréant la séquence ; néanmoins un superutilisateur
peut déjà modifier le propriétaire de toute séquence).
Seul le propriétaire de la séquence peut utiliser ALTER
SEQUENCE
. Pour modifier le schéma de la séquence, il faut posséder
le droit CREATE
sur le nouveau schéma.
nom
Le nom de la séquence à modifier (éventuellement qualifié du nom du schéma).
IF EXISTS
Ne retourne pas d'erreur si la séquence n'existe pas. Seul un message d'avertissement est retourné dans ce cas.
type_donnée
La clause facultative AS
change le type de
données de la séquence. Les types valides sont
type_donnee
smallint
, integer
et
bigint
.
Changer le type de donnée change automatiquement les valeurs minimales et
maximales de la séquence si et seulement si les précédentes valeurs
minimales et maximales étaient les valeurs minimales et maximales de
l'ancien type de donnée (autrement dit, si la séquence avait été créée en
utilisant NO MINVALUE
ou NO
MAXVALUE
, de manière implicite ou explicite). Sinon les valeurs
minimales et maximales sont préservées, à moins que de nouvelles valeurs
soient spécifiées dans la même commande. Si les nouvelles valeurs
minimales et maximales ne rentrent pas dans le nouveau type de donnée,
une erreur sera générée.
incrément
La clause INCREMENT BY
est optionnelle. Une
valeur positive crée une séquence croissante, une valeur négative une
séquence décroissante. Lorsque cette clause n'est pas spécifiée, la
valeur de l'ancien incrément est conservée.
incrément
valeurmin
NO MINVALUE
La clause optionnelle MINVALUE
, détermine la valeur
minimale de la séquence. Si valeurmin
NO MINVALUE
est utilisé,
les valeurs par défaut, 1 et la valeur minimale du type de donnée sont
utilisées respectivement pour les séquences croissantes et décroissantes.
Si aucune option n'est précisée, la valeur minimale courante est
conservée.
valeurmax
NO MAXVALUE
La clause optionnelle MAXVALUE
détermine la valeur
maximale de la séquence. Si valeurmax
NO MAXVALUE
est utilisé,
la valeur maximale du type de données et -1 sont utilisées respectivement
pour les séquences croissantes et décroissantes comme valeurs par défaut.
Si aucune option n'est précisée, la valeur maximale courante est
conservée.
début
La clause optionnelle START WITH
modifie la valeur de
départ enregistré pour la séquence. Cela n'a pas d'effet sur la valeur
actuelle de celle-ci ; cela configure la valeur
que les prochaines commandes début
ALTER SEQUENCE RESTART
utiliseront.
restart
La clause optionnelle RESTART [ WITH
modifie la valeur
actuelle de la séquence. C'est équivalent à l'appel de la fonction
restart
]setval
avec is_called
=
false
: la valeur spécifiée sera renvoyée par le
prochain appel à nextval
.
Écrire RESTART
sans valeur pour restart
est équivalent à fournir la
valeur de début enregistrée par CREATE SEQUENCE
ou par
ALTER SEQUENCE START WITH
.
En contraste avec un appel à setval
, une opération
RESTART
sur une séquence est transactionnelle et
empêche les transactions concurrentes d'obtenir des nombres de la même
séquence. Si ce n'est pas le mode désiré, setval
doit être utilisé.
cache
La clause CACHE
active la préallocation
des numéros de séquences et leur stockage en mémoire pour en accélerer
l'accès. 1 est la valeur minimale (une seule valeur est engendrée à la
fois, donc pas de cache). Lorsque la clause n'est pas spécifiée,
l'ancienne valeur est conservée.
cache
CYCLE
Le mot clé optionnel CYCLE
est utilisé pour autoriser
la séquence à boucler lorsque valeurmax
ou valeurmin
est atteint par,
respectivement, une séquence croissante ou décroissante. Lorsque la
limite est atteinte, le prochain numéro engendré est, respectivement,
valeurmin
ou valeurmax
.
NO CYCLE
Si le mot clé optionnel NO CYCLE
est spécifié, tout
appel à nextval
alors que la séquence a atteint sa
valeur maximale, dans le cas d'une séquence croissante, ou sa valeur
minimale dans le cas contraire, retourne une erreur. Lorsque ni
CYCLE
ni NO CYCLE
ne sont
spécifiés, l'ancien comportement est préservé.
SET { LOGGED | UNLOGGED }
Cette clause change la séquence de non journalisée à journalisée et vice-versa (voir CREATE SEQUENCE). Elle ne peut pas être utilisée avec une séquence temporaire.
OWNED BY
nom_table
.nom_colonne
OWNED BY NONE
L'option OWNED BY
permet d'associer la séquence à une
colonne spécifique d'une table pour que cette séquence soit supprimée
automatiquement si la colonne (ou la table complète) est supprimée. Si
cette option est spécifiée, cette association remplacera toute ancienne
association de cette séquence. La table indiquée doit avoir le même
propriétaire et être dans le même schéma que la séquence. Indiquer
OWNED BY NONE
supprime toute association existante,
rendant à la séquence son « autonomie ».
nouveau_propriétaire
Le nom utilisateur du nouveau propriétaire de la séquence.
nouveau_nom
Le nouveau nom de la séquence.
nouveau_schema
Le nouveau schéma de la séquence.
ALTER SEQUENCE
n'affecte pas immédiatement les résultats
de nextval
pour les sessions, à l'exception de la
session courante, qui ont préalloué (placé en cache) des valeurs de la
séquence. Elles épuisent les valeurs en cache avant de prendre en compte les
modifications sur les paramètres de génération de la séquence. La session à
l'origine de la commande est, quant à elle, immédiatement affectée.
ALTER SEQUENCE
ne modifie pas le statut
currval
d'une séquence (avant
PostgreSQL 8.3, c'était le cas quelque fois).
ALTER SEQUENCE
bloque les appels concurrents à
nextval
, currval
,
lastval
, et setval
.
Pour des raisons historiques, ALTER TABLE
peut aussi être
utilisé avec les séquences, mais seules les variantes d'ALTER
TABLE
autorisées pour les séquences sont équivalentes aux formes
affichées ci-dessus.
Redémarrez la séquence serial
à 105 :
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
est conforme au standard
SQL, à l'exception des variantes AS
,
START WITH
, OWNED BY
, OWNER
TO
, RENAME TO
et SET SCHEMA
qui sont une extension PostgreSQL.