ALTER SEQUENCE — Modifier la définition d'un générateur de séquence
+ALTER SEQUENCE [ IF EXISTS ]nom
[ AStype_donnee
] [ INCREMENT [ BY ]increment
] [ 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
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_schema
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 super-utilisateur
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_donnee
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 était 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.
increment
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.
increment
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, soit 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é.
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é (caché) 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
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.