CREATE SEQUENCE - Amazon Aurora DSQL

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 AS data_type spécifie le type de données de la séquence. Les types valides sontbigint. 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 BY increment indique 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.

minvalue / NO MINVALUE

La clause facultative MINVALUE minvalue détermine la valeur minimale qu'une séquence peut générer. Si cette clause n'est pas fournie ou NO MINVALUE est 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 MAXVALUE maxvalue détermine la valeur maximale de la séquence. Si cette clause n'est pas fournie ou NO MAXVALUE est 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 le maxvalue ou minvalue a été atteint par une séquence ascendante ou descendante respectivement. Si la limite est atteinte, le prochain nombre généré sera respectivement maxvalue le minvalue ou.

Si NO CYCLE cette option est spécifiée, tout appel effectué une nextval fois que la séquence a atteint sa valeur maximale renverra une erreur. Si aucun des deux CYCLE ou NO CYCLE n'est spécifié, NO CYCLE c'est la valeur par défaut.

start

La clause facultative START WITH start permet à la séquence de commencer n'importe où. La valeur de départ par défaut est minvalue pour les séquences ascendantes et maxvalue pour les séquences descendantes.

cache

La clause CACHE cache indique 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 Aurora CACHE DSQL 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_name / OWNED 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 BY clause est une extension PostgreSQL.