CREATE SEQUENCE - Amazon Aurora DSQL

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

CREATE SEQUENCE

CREATE SEQUENCE— definire un nuovo generatore di sequenze.

Importante

In PostgreSQL, la CACHE specificazione è facoltativa e il valore predefinito è 1. In un sistema distribuito come Amazon Aurora DSQL, le operazioni di sequenza implicano il coordinamento e una dimensione della cache pari a 1 può aumentare il sovraccarico di coordinamento in caso di elevata concorrenza. Sebbene valori di cache più elevati consentano di fornire numeri di sequenza da intervalli preallocati localmente, migliorando la velocità di trasmissione, è possibile perdere i valori riservati non utilizzati, rendendo più visibili le lacune e gli effetti di ordinamento. Poiché le applicazioni differiscono nella loro sensibilità all'ordinamento delle allocazioni rispetto alla velocità effettiva, Amazon Aurora DSQL richiede di essere specificato in modo esplicito e attualmente supporta CACHE = 1 o CACHE >= 65536 fornisce una chiara distinzione tra un comportamento di allocazione più vicino CACHE alla generazione strettamente sequenziale e l'allocazione ottimizzata per carichi di lavoro altamente simultanei.

QuandoCACHE >= 65536, è garantito che i valori della sequenza siano unici, ma potrebbero non essere generati in ordine crescente tra le sessioni, e possono verificarsi lacune, in particolare quando i valori memorizzati nella cache non vengono consumati completamente. Queste caratteristiche sono coerenti con la semantica di PostgreSQL per le sequenze memorizzate nella cache in uso simultaneo, in cui entrambi i sistemi garantiscono valori distinti ma non garantiscono un ordinamento strettamente sequenziale tra le sessioni.

All'interno di una singola sessione client, i valori di sequenza potrebbero non apparire sempre strettamente crescenti, in particolare al di fuori delle transazioni esplicite. Questo comportamento è simile alle distribuzioni PostgreSQL che utilizzano il pool di connessioni. Un comportamento di allocazione più simile a un ambiente PostgreSQL a sessione singola può essere ottenuto utilizzando CACHE = 1 o ottenendo valori di sequenza all'interno di transazioni esplicite.

ConCACHE = 1, l'allocazione delle sequenze segue il comportamento delle sequenze non memorizzate nella cache di PostgreSQL.

Per indicazioni su come utilizzare al meglio le sequenze basate sui modelli di carico di lavoro, consulta. Utilizzo di sequenze e colonne di identità

Sintassi supportata

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 SEQUENCEcrea un nuovo generatore di numeri di sequenza. Ciò comporta la creazione e l'inizializzazione di una nuova tabella speciale a riga singola con il nome. name Il generatore sarà di proprietà dell'utente che emette il comando.

Se viene fornito un nome di schema, la sequenza viene creata nello schema specificato. Altrimenti viene creata nello schema corrente. Il nome della sequenza deve essere distinto dal nome di qualsiasi altra relazione (tabella, sequenza, indice, vista, vista materializzata o tabella esterna) nello stesso schema.

Dopo aver creato una sequenza, è possibile utilizzare le funzioni nextval e setval operare sulla sequenza. currval Queste funzioni sono documentate inFunzioni di manipolazione di sequenze.

Sebbene non sia possibile aggiornare direttamente una sequenza, è possibile utilizzare una query come:

SELECT * FROM name;

per esaminare alcuni parametri e lo stato corrente di una sequenza. In particolare, il last_value campo della sequenza mostra l'ultimo valore assegnato da ogni sessione. (Naturalmente, questo valore potrebbe essere obsoleto nel momento in cui viene stampato, se altre sessioni effettuano nextval chiamate attivamente.) Altri parametri come increment e maxvalue possono essere osservati nella pg_sequences vista.

Parameters

IF NOT EXISTS

Non generare un errore se esiste già una relazione con lo stesso nome. In questo caso viene emesso un avviso. Nota che non c'è alcuna garanzia che la relazione esistente sia qualcosa di simile alla sequenza che sarebbe stata creata: potrebbe anche non essere una sequenza.

name

Il nome (facoltativamente qualificato dallo schema) della sequenza da creare.

data_type

La clausola facoltativa AS data_type specifica il tipo di dati della sequenza. I tipi validi sono. bigint bigintè l'impostazione predefinita. Il tipo di dati determina i valori minimo e massimo predefiniti della sequenza.

increment

La clausola facoltativa INCREMENT BY increment specifica quale valore viene aggiunto al valore della sequenza corrente per creare un nuovo valore. Un valore positivo creerà una sequenza crescente, uno negativo una sequenza discendente. Il valore predefinito è 1.

minvalue / NO MINVALUE

La clausola opzionale MINVALUE minvalue determina il valore minimo che una sequenza può generare. Se questa clausola non viene fornita o NO MINVALUE viene specificata, verranno utilizzate le impostazioni predefinite. L'impostazione predefinita per una sequenza crescente è 1. L'impostazione predefinita per una sequenza decrescente è il valore minimo del tipo di dati.

maxvalue / NO MAXVALUE

La clausola opzionale MAXVALUE maxvalue determina il valore massimo per la sequenza. Se questa clausola non viene fornita o NO MAXVALUE viene specificata, verranno utilizzati i valori predefiniti. L'impostazione predefinita per una sequenza crescente è il valore massimo del tipo di dati. L'impostazione predefinita per una sequenza decrescente è -1.

CYCLE / NO CYCLE

L'CYCLEopzione consente alla sequenza di avvolgersi quando la maxvalue o minvalue è stata raggiunta rispettivamente da una sequenza ascendente o discendente. Se viene raggiunto il limite, il numero successivo generato sarà rispettivamente il minvalue omaxvalue.

Se NO CYCLE è specificato, tutte le chiamate effettuate nextval dopo che la sequenza ha raggiunto il valore massimo restituiranno un errore. Se non viene specificato nessuno dei dueCYCLE, NO CYCLE è l'impostazione predefinita. NO CYCLE

start

La clausola opzionale START WITH start consente alla sequenza di iniziare da qualsiasi punto. Il valore iniziale predefinito è minvalue per le sequenze ascendenti e maxvalue per quelle discendenti.

cache

La clausola CACHE cache specifica quanti numeri di sequenza devono essere preallocati e archiviati in memoria per un accesso più rapido. I valori accettabili per CACHE Aurora DSQL sono 1 o qualsiasi numero >= 65536. Il valore minimo è 1 (è possibile generare solo un valore alla volta, il che significa nessuna cache).

OWNED BY table_name.column_name / OWNED BY NONE

L'OWNED BYopzione fa sì che la sequenza venga associata a una colonna specifica della tabella, in modo che se quella colonna (o l'intera tabella) viene eliminata, anche la sequenza verrà eliminata automaticamente. La tabella specificata deve avere lo stesso proprietario e appartenere allo stesso schema della sequenza. OWNED BY NONE, l'impostazione predefinita, specifica che tale associazione non esiste.

Note

Utilizzare DROP SEQUENCE per rimuovere una sequenza.

Le sequenze sono basate sull'bigintaritmetica, quindi l'intervallo non può superare l'intervallo di un numero intero di otto byte (da -9223372036854775808 a 9223372036854775807).

Poiché le chiamate e non vengono mai annullate, gli oggetti di sequenza non possono essere utilizzati se è necessaria l'assegnazione «senza interruzioni» dei numeri di sequenza. nextval setval

Ogni sessione allocherà e memorizzerà nella cache i valori di sequenza successivi durante un accesso all'oggetto sequenza e aumenterà di conseguenza quelli dell'oggetto sequenza. last_value Quindi, i successivi utilizzi cache -1 di nextval quella sessione restituiscono semplicemente i valori preallocati senza toccare l'oggetto della sequenza. Pertanto, tutti i numeri assegnati ma non utilizzati all'interno di una sessione andranno persi al termine di quella sessione, con conseguenti «buchi» nella sequenza.

Inoltre, sebbene sia garantito che più sessioni assegnino valori di sequenza distinti, i valori potrebbero essere generati in modo non sequenziale se si considerano tutte le sessioni. Ad esempio, con un'cacheimpostazione di 10, la sessione A potrebbe riservare i valori 1.. 10 e restituire nextval =1, quindi la sessione B potrebbe riservare i valori 11.. 20 e restituire nextval =11 prima che la sessione A abbia generato =2. nextval Pertanto, con un'cacheimpostazione pari a uno si può presumere che nextval i valori vengano generati in sequenza; con un'cacheimpostazione maggiore di uno si deve solo supporre che nextval i valori siano tutti distinti, non che vengano generati in modo puramente sequenziale. Inoltre, last_value rifletterà il valore più recente riservato da qualsiasi sessione, indipendentemente dal fatto che sia stato ancora restituito da. nextval

Un'altra considerazione è che un'setvalesecuzione su tale sequenza non verrà notata dalle altre sessioni finché non avranno esaurito i valori preallocati che hanno memorizzato nella cache.

Esempi

Create una sequenza crescente chiamataserial, a partire da 101:

CREATE SEQUENCE serial CACHE 65536 START 101;

Seleziona il numero successivo da questa sequenza:

SELECT nextval('serial'); nextval --------- 101

Seleziona il numero successivo da questa sequenza:

SELECT nextval('serial'); nextval --------- 102

Usa questa sequenza in un INSERT comando:

INSERT INTO distributors VALUES (nextval('serial'), 'nothing');

Reimposta la sequenza su un valore specifico utilizzandosetval:

SELECT setval('serial', 200); SELECT nextval('serial'); nextval --------- 201

Compatibilità

CREATE SEQUENCEè conforme allo standard SQL, con le seguenti eccezioni:

  • L'ottenimento del valore successivo viene eseguito utilizzando la nextval() funzione anziché l'espressione dello NEXT VALUE FOR standard.

  • La OWNED BY clausola è un'estensione PostgreSQL.