Fonctions de manipulation de séquence - 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.

Fonctions de manipulation de séquence

Cette section décrit les fonctions permettant d'opérer sur des objets de séquence, également appelés générateurs de séquences ou simplement séquences. Les objets de séquence sont des tables spéciales à une seule ligne créées avecCREATE SEQUENCE. Les objets de séquence sont couramment utilisés pour générer des identifiants uniques pour les lignes d'une table. Les fonctions de séquence fournissent des méthodes simples et sécurisées pour plusieurs utilisateurs pour obtenir des valeurs de séquence successives à partir d'objets de séquence.

Important

Lorsque vous utilisez des séquences, la valeur du cache doit être soigneusement prise en compte. Pour plus d'informations, consultez la légende Important sur la CREATE SEQUENCE page.

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é.

Fonction Description
nextval ( regclass ) → bigint Avance l'objet de séquence jusqu'à sa valeur suivante et renvoie cette valeur. Cela se fait de manière atomique : même si plusieurs sessions s'exécutent nextval simultanément, chacune recevra en toute sécurité une valeur de séquence distincte. Si l'objet de séquence a été créé avec des paramètres par défaut, les nextval appels successifs renverront des valeurs croissantes commençant par 1. D'autres comportements peuvent être obtenus en utilisant les paramètres appropriés dans la CREATE SEQUENCE commande. Cette fonction requiert USAGE ou UPDATE privilégie la séquence.
setval ( regclass, bigint [, boolean ] ) → bigint Définit la valeur actuelle de l'objet de séquence, et éventuellement son is_called indicateur. Le formulaire à deux paramètres définit le last_value champ de la séquence à la valeur spécifiée et définit son is_called champ à la valeur spécifiéetrue, ce qui signifie que le suivant nextval fera avancer la séquence avant de renvoyer une valeur. La valeur qui sera signalée currval est également définie sur la valeur spécifiée. Dans le formulaire à trois paramètres, il is_called peut être défini sur true oufalse. truea le même effet que le formulaire à deux paramètres. S'il est défini surfalse, le suivant nextval renverra exactement la valeur spécifiée, et l'avancement de la séquence commence par ce qui suitnextval. De plus, la valeur indiquée par currval n'est pas modifiée ici. Par exemple :
SELECT setval('myseq', 42); -- Next nextval will return 43 SELECT setval('myseq', 42, true); -- Same as above SELECT setval('myseq', 42, false); -- Next nextval will return 42
Le résultat renvoyé par setval est simplement la valeur de son deuxième argument. Cette fonction nécessite un UPDATE privilège sur la séquence.
currval ( regclass ) → bigint Renvoie la dernière valeur obtenue par nextval pour cette séquence dans la session en cours. (Une erreur est signalée si cette séquence n'nextvala jamais été appelée au cours de cette session.) Comme cela renvoie une valeur locale à la session, cela donne une réponse prévisible, que d'autres sessions aient été exécutées ou non nextval parce que la session en cours l'a fait. Cette fonction requiert USAGE ou SELECT privilégie la séquence.
lastval () → bigint Renvoie la dernière valeur renvoyée par la transaction nextval en cours. Cette fonction est identique àcurrval, sauf qu'au lieu de prendre le nom de la séquence comme argument, elle fait référence à la séquence nextval la plus récente appliquée dans la transaction en cours. L'appel est une erreur lastval s'il nextval n'a pas encore été appelé dans le cadre de la transaction en cours. Cette fonction requiert USAGE ou SELECT privilégie la dernière séquence utilisée.
Avertissement

La valeur obtenue par nextval n'est pas récupérée pour être réutilisée si la transaction d'appel est abandonnée ultérieurement. Cela signifie que les annulations de transactions ou les pannes de base de données peuvent entraîner des lacunes dans la séquence des valeurs attribuées. Cela peut également se produire sans interruption de transaction. Par exemple, une ON CONFLICT clause INSERT with an calculera le to-be-inserted tuple, y compris en effectuant les nextval appels requis, avant de détecter tout conflit qui l'obligerait à suivre la ON CONFLICT règle à la place. Ainsi, les objets de séquence d'Aurora DSQL ne peuvent pas être utilisés pour obtenir des séquences « sans interruption ».

De même, les modifications d'état de séquence effectuées par setval sont immédiatement visibles pour les autres transactions et ne sont pas annulées si la transaction appelante est annulée.

La séquence à exécuter par une fonction de séquence est spécifiée par un regclass argument, qui est simplement l'OID de la séquence dans le catalogue pg_class système. Cependant, il n'est pas nécessaire de rechercher l'OID manuellement, car le convertisseur d'entrée du type de regclass données fera le travail à votre place. Consultez la documentation de PostgreSQL sur les types d'identificateurs d'objets pour plus de détails.