Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
CREATE SEQUENCE
CREATE SEQUENCE— définit un nouveau générateur de séquences.
Important
Dans PostgreSQL, la CACHE spécification est facultative et la valeur par défaut est 1. Dans un système distribué tel qu'Amazon Aurora DSQL, les opérations de séquence impliquent une coordination, et une taille de cache de 1 peut augmenter la charge de coordination en cas de forte simultanéité. Alors que des valeurs de cache plus importantes permettent de servir des numéros de séquence à partir de plages préallouées localement, ce qui améliore le débit, les valeurs réservées non utilisées peuvent être perdues, ce qui rend les écarts et les effets d'ordre plus visibles. Étant donné que la sensibilité des applications à l'ordre d'allocation diffère de celle du débit, Amazon Aurora DSQL doit CACHE être spécifiée de manière explicite et prend actuellement en charge CACHE = 1 ouCACHE >= 65536, en établissant une distinction claire entre un comportement d'allocation proche de la génération strictement séquentielle et une allocation optimisée pour des charges de travail hautement simultanées.
Lorsque l'CACHE >= 65536unicité des valeurs de séquence reste garantie, mais qu'elles peuvent ne pas être générées dans un ordre strictement croissant d'une session à l'autre, des écarts peuvent survenir, en particulier lorsque les valeurs mises en cache ne sont pas entièrement consommées. Ces caractéristiques sont cohérentes avec la sémantique de PostgreSQL pour les séquences mises en cache utilisées simultanément, où les deux systèmes garantissent des valeurs distinctes mais ne garantissent pas un ordre strictement séquentiel entre les sessions.
Au cours d'une seule session client, les valeurs de séquence peuvent ne pas toujours apparaître strictement croissantes, en particulier en dehors des transactions explicites. Ce comportement est similaire à celui des déploiements PostgreSQL qui utilisent le regroupement de connexions. Un comportement d'allocation plus proche de celui d'un environnement PostgreSQL mono-session peut être obtenu en CACHE = 1 utilisant ou en obtenant des valeurs de séquence dans le cadre de transactions explicites.
AvecCACHE = 1, l'allocation de séquences suit le comportement des séquences non mises en cache de PostgreSQL.
Pour obtenir des conseils sur la meilleure façon d'utiliser les séquences basées sur les modèles de charge de travail, voirUtilisation de séquences et de colonnes d'identité.
Syntaxe prise en charge
CREATE SEQUENCE [ IF NOT EXISTS ] name CACHE cache [ AS data_type ] [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ [ NO ] CYCLE ] [ START [ WITH ] start ] [ OWNED BY { table_name.column_name | NONE } ] where data_type is BIGINT and cache = 1 or cache >= 65536
Description
CREATE SEQUENCEcrée un nouveau générateur de numéros de séquence. Cela implique la création et l'initialisation d'une nouvelle table spéciale à une seule ligne portant le nom. name Le générateur appartiendra à l'utilisateur qui émet la commande.
Si un nom de schéma est donné, la séquence est créée dans le schéma spécifié. Dans le cas contraire, il est créé dans le schéma actuel. Le nom de séquence doit être distinct du nom de toute autre relation (table, séquence, index, vue, vue matérialisée ou table étrangère) dans le même schéma.
Une fois qu'une séquence est créée, vous utilisez les fonctions nextvalcurrval, et setval pour opérer sur la séquence. Ces fonctions sont documentées dansFonctions de manipulation de séquence.
Bien que vous ne puissiez pas mettre à jour une séquence directement, vous pouvez utiliser une requête telle que :
SELECT * FROM name;
pour examiner certains paramètres et l'état actuel d'une séquence. En particulier, le last_value champ de la séquence indique la dernière valeur allouée par une session. (Bien entendu, cette valeur peut être obsolète au moment de son impression, si d'autres sessions effectuent activement des nextval appels.) D'autres paramètres tels que increment et maxvalue peuvent être observés dans la pg_sequences vue.
Parameters
IF NOT EXISTS-
Ne renvoie pas d'erreur si une relation portant le même nom existe déjà. Un avis est émis dans ce cas. Notez qu'il n'y a aucune garantie que la relation existante ressemble à la séquence qui aurait été créée ; ce n'est peut-être même pas une séquence.
name-
Nom (éventuellement qualifié par schéma) de la séquence à créer.
data_type-
La clause facultative
ASspécifie le type de données de la séquence. Les types valides sontdata_typebigint.bigintest la valeur par défaut. Le type de données détermine les valeurs minimale et maximale par défaut de la séquence. increment-
La clause facultative
INCREMENT BYindique quelle valeur est ajoutée à la valeur de séquence actuelle pour créer une nouvelle valeur. Une valeur positive fera une séquence ascendante, une valeur négative une séquence descendante. La valeur par défaut est 1.increment minvalue/NO MINVALUE-
La clause facultative
MINVALUEdétermine la valeur minimale qu'une séquence peut générer. Si cette clause n'est pas fournie ouminvalueNO MINVALUEest spécifiée, les valeurs par défaut seront utilisées. La valeur par défaut pour une séquence ascendante est 1. La valeur par défaut pour une séquence descendante est la valeur minimale du type de données. maxvalue/NO MAXVALUE-
La clause facultative
MAXVALUEdétermine la valeur maximale de la séquence. Si cette clause n'est pas fournie oumaxvalueNO MAXVALUEest spécifiée, les valeurs par défaut seront utilisées. La valeur par défaut pour une séquence ascendante est la valeur maximale du type de données. La valeur par défaut pour une séquence descendante est -1. CYCLE/NO CYCLE-
L'
CYCLEoption permet à la séquence de s'enrouler lorsque lemaxvalueouminvaluea été atteint par une séquence ascendante ou descendante respectivement. Si la limite est atteinte, le prochain nombre généré sera respectivementmaxvalueleminvalueou.Si
NO CYCLEcette option est spécifiée, tout appel effectué unenextvalfois que la séquence a atteint sa valeur maximale renverra une erreur. Si aucun des deuxCYCLEouNO CYCLEn'est spécifié,NO CYCLEc'est la valeur par défaut. start-
La clause facultative
START WITHpermet à la séquence de commencer n'importe où. La valeur de départ par défaut eststartminvaluepour les séquences ascendantes etmaxvaluepour les séquences descendantes. cache-
La clause
CACHEindique le nombre de numéros de séquence à préallouer et à stocker en mémoire pour un accès plus rapide. Les valeurs acceptables pour AuroracacheCACHEDSQL sont 1 ou n'importe quel nombre >= 65536. La valeur minimale est 1 (une seule valeur peut être générée à la fois, ce qui signifie qu'il n'y a pas de cache). OWNED BY/table_name.column_nameOWNED BY NONE-
OWNED BYCette option permet d'associer la séquence à une colonne de table spécifique, de sorte que si cette colonne (ou le tableau entier) est supprimée, la séquence sera également automatiquement supprimée. La table spécifiée doit avoir le même propriétaire et être dans le même schéma que la séquence.OWNED BY NONE, valeur par défaut, indique qu'il n'existe aucune association de ce type.
Remarques
DROP SEQUENCEÀ utiliser pour supprimer une séquence.
Les séquences étant basées sur l'bigintarithmétique, la plage ne peut pas dépasser la plage d'un entier de huit octets (-9223372036854775808 à 9223372036854775807).
Comme nextval les setval appels ne sont jamais annulés, les objets de séquence ne peuvent pas être utilisés si l'attribution « sans interruption » de numéros de séquence est nécessaire.
Chaque session allouera et mettra en cache les valeurs de séquence successives lors d'un accès à l'objet de séquence et augmentera celles de l'objet de séquence last_value en conséquence. Ensuite, les cache -1 utilisations suivantes de nextval cette session renvoient simplement les valeurs préallouées sans toucher à l'objet de séquence. Ainsi, tous les numéros alloués mais non utilisés au cours d'une session seront perdus à la fin de cette session, ce qui entraînera des « trous » dans la séquence.
En outre, bien que plusieurs sessions soient garanties pour allouer des valeurs de séquence distinctes, les valeurs peuvent être générées hors séquence lorsque toutes les sessions sont prises en compte. Par exemple, avec un cache paramètre de 10, la session A peut réserver les valeurs 1.. 10 et renvoyer nextval =1, puis la session B peut réserver les valeurs 11.. 20 et renvoyer nextval =11 avant que la session A n'ait généré nextval =2. Ainsi, avec un cache paramètre égal à un, on peut supposer sans risque de se tromper que nextval les valeurs sont générées de manière séquentielle ; avec un cache paramètre supérieur à un, vous devez uniquement supposer que les nextval valeurs sont toutes distinctes, et non qu'elles sont générées de manière purement séquentielle. En outre, last_value reflétera la dernière valeur réservée par une session, qu'elle ait déjà été renvoyée ou nonnextval.
Une autre considération est qu'une setval exécution sur une telle séquence ne sera pas remarquée par les autres sessions tant qu'elles n'auront pas utilisé les valeurs préallouées qu'elles ont mises en cache.
Exemples
Créez une séquence ascendante appeléeserial, à partir de 101 :
CREATE SEQUENCE serial CACHE 65536 START 101;
Sélectionnez le numéro suivant dans cette séquence :
SELECT nextval('serial'); nextval --------- 101
Sélectionnez le numéro suivant dans cette séquence :
SELECT nextval('serial'); nextval --------- 102
Utilisez cette séquence dans une INSERT commande :
INSERT INTO distributors VALUES (nextval('serial'), 'nothing');
Réinitialisez la séquence à une valeur spécifique en utilisant setval :
SELECT setval('serial', 200); SELECT nextval('serial'); nextval --------- 201
Compatibilité
CREATE SEQUENCEest conforme à la norme SQL, avec les exceptions suivantes :
-
L'obtention de la valeur suivante s'effectue à l'aide de la
nextval()fonction plutôt que de l'NEXT VALUE FORexpression de la norme. -
La
OWNED BYclause est une extension PostgreSQL.