Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CREATE SEQUENCE
CREATE SEQUENCE— definiere einen neuen Sequenzgenerator.
Wichtig
In PostgreSQL CACHE ist die Angabe optional und der Standardwert ist 1. In einem verteilten System wie Amazon Aurora DSQL erfordern Sequenzoperationen Koordination, und eine Cachegröße von 1 kann den Koordinationsaufwand bei hoher Parallelität erhöhen. Größere Cache-Werte ermöglichen es zwar, Sequenznummern aus lokal vorab zugewiesenen Bereichen bereitzustellen, was den Durchsatz verbessert, aber ungenutzte reservierte Werte können verloren gehen, wodurch Lücken und Reihenfolgen sichtbarer werden. Da sich Anwendungen in ihrer Sensitivität in Bezug auf die Reihenfolge der Zuweisungen im Vergleich zum Durchsatz unterscheiden, muss CACHE Amazon Aurora DSQL explizit spezifiziert werden und unterstützt derzeit CACHE = 1 oderCACHE >= 65536, wobei eine klare Unterscheidung zwischen einem Zuweisungsverhalten, das eher der strikt sequentiellen Generierung ähnelt, und einer Zuweisung, die für sehr gleichzeitige Workloads optimiert ist, gewährleistet wird.
Wenn Sequenzwerte garantiert eindeutig sindCACHE >= 65536, sie aber möglicherweise nicht in streng aufsteigender Reihenfolge über Sitzungen hinweg generiert werden, kann es zu Lücken kommen, insbesondere wenn zwischengespeicherte Werte nicht vollständig verbraucht werden. Diese Eigenschaften stimmen mit der PostgreSQL-Semantik für zwischengespeicherte Sequenzen bei gleichzeitiger Verwendung überein, wobei beide Systeme unterschiedliche Werte garantieren, aber keine strikte sequentielle Reihenfolge zwischen den Sitzungen garantieren.
Innerhalb einer einzelnen Clientsitzung erscheinen Sequenzwerte möglicherweise nicht immer strikt ansteigend, insbesondere außerhalb expliziter Transaktionen. Dieses Verhalten ähnelt PostgreSQL-Bereitstellungen, die Verbindungspooling verwenden. Ein Zuweisungsverhalten, das eher einer PostgreSQL-Umgebung mit einer Sitzung ähnelt, kann erreicht werden, indem Sequenzwerte verwendet CACHE = 1 oder innerhalb expliziter Transaktionen abgerufen werden.
Mit folgt die Sequenzzuweisung dem Sequenzverhalten von PostgreSQLCACHE = 1, das nicht zwischengespeichert wurde.
Hinweise zur optimalen Verwendung von Sequenzen, die auf Workload-Mustern basieren, finden Sie unter. Arbeiten mit Sequenzen und Identitätsspalten
Unterstützte Syntax
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 SEQUENCEerstellt einen neuen Sequenznummerngenerator. Dies beinhaltet das Erstellen und Initialisieren einer neuen speziellen einzeiligen Tabelle mit dem Namen. name Der Generator wird dem Benutzer gehören, der den Befehl ausgibt.
Wenn ein Schemaname angegeben wird, wird die Sequenz im angegebenen Schema erstellt. Andernfalls wird sie im aktuellen Schema erstellt. Der Sequenzname muss sich vom Namen jeder anderen Relation (Tabelle, Sequenz, Index, Ansicht, materialisierte Ansicht oder Fremdtabelle) im selben Schema unterscheiden.
Nachdem eine Sequenz erstellt wurde, verwenden Sie die Funktionennextval, undcurrval, setval um die Sequenz zu bearbeiten. Diese Funktionen sind in dokumentiertSequenz-Bearbeitungsfunktionen.
Sie können eine Sequenz zwar nicht direkt aktualisieren, aber Sie können eine Abfrage wie die folgende verwenden:
SELECT * FROM name;
um einige Parameter und den aktuellen Status einer Sequenz zu untersuchen. Insbesondere zeigt das last_value Feld der Sequenz den letzten Wert an, der von einer Sitzung zugewiesen wurde. (Natürlich kann dieser Wert zum Zeitpunkt der Ausgabe veraltet sein, wenn andere Sitzungen aktiv nextval Aufrufe ausführen.) Andere Parameter wie increment und maxvalue können in der pg_sequences Ansicht beobachtet werden.
Parameters
IF NOT EXISTS-
Geben Sie keinen Fehler aus, wenn bereits eine Relation mit demselben Namen existiert. In diesem Fall wird eine Mitteilung ausgegeben. Beachten Sie, dass es keine Garantie dafür gibt, dass die bestehende Beziehung der Sequenz ähnelt, die erstellt worden wäre — es ist möglicherweise nicht einmal eine Sequenz.
name-
Der Name (optional schemaqualifiziert) der zu erstellenden Sequenz.
data_type-
Die optionale Klausel
ASgibt den Datentyp der Sequenz an. Gültige Typen sinddata_typebigint.bigintist die Standardeinstellung. Der Datentyp bestimmt die standardmäßigen Minimal- und Maximalwerte der Sequenz. increment-
Die optionale Klausel
INCREMENT BYgibt an, welcher Wert zum aktuellen Sequenzwert hinzugefügt wird, um einen neuen Wert zu erstellen. Ein positiver Wert ergibt eine aufsteigende Sequenz, ein negativer Wert eine absteigende Sequenz. Der Standardwert ist 1.increment minvalue/NO MINVALUE-
Die optionale Klausel
MINVALUEbestimmt den Mindestwert, den eine Sequenz generieren kann. Wenn diese Klausel nicht angegeben oder angegebenminvalueNO MINVALUEwird, werden Standardwerte verwendet. Die Standardeinstellung für eine aufsteigende Sequenz ist 1. Die Standardeinstellung für eine absteigende Sequenz ist der Mindestwert des Datentyps. maxvalue/NO MAXVALUE-
Die optionale Klausel
MAXVALUEbestimmt den Höchstwert für die Sequenz. Wenn diese Klausel nicht angegeben oder angegebenmaxvalueNO MAXVALUEwird, werden Standardwerte verwendet. Die Standardeinstellung für eine aufsteigende Sequenz ist der Maximalwert des Datentyps. Die Standardeinstellung für eine absteigende Sequenz ist -1. CYCLE/NO CYCLE-
Die
CYCLEOption ermöglicht es, dass die Sequenz umgebrochen wird, wenn dasmaxvalueoderminvaluedurch eine aufsteigende bzw. absteigende Sequenz erreicht wurde. Wenn das Limit erreicht ist, wird als nächste Zahl dasminvalueOdermaxvaluegeneriert.Wenn
NO CYCLEangegeben, geben alle Aufrufe von,nextvalnachdem die Sequenz ihren Maximalwert erreicht hat, einen Fehler zurück. Wenn keinerCYCLEvon beidenNO CYCLEangegebenNO CYCLEist, ist dies die Standardeinstellung. start-
Die optionale Klausel
START WITHermöglicht es, dass die Sequenz an einer beliebigen Stelle beginnt. Der Standardstartwert giltstartminvaluefür aufsteigende undmaxvaluefür absteigende Sequenzen. cache-
Die Klausel
CACHEgibt an, wie viele Sequenznummern vorab zugewiesen und für einen schnelleren Zugriff im Speicher gespeichert werden sollen. Die akzeptablen Werte fürcacheCACHEin Aurora DSQL sind 1 oder eine beliebige Zahl >= 65536. Der Mindestwert ist 1 (es kann jeweils nur ein Wert generiert werden, d. h. kein Cache). OWNED BY/table_name.column_nameOWNED BY NONE-
Die
OWNED BYOption bewirkt, dass die Sequenz einer bestimmten Tabellenspalte zugeordnet wird, sodass, wenn diese Spalte (oder ihre gesamte Tabelle) gelöscht wird, auch die Sequenz automatisch gelöscht wird. Die angegebene Tabelle muss denselben Besitzer haben und sich im selben Schema wie die Sequenz befinden.OWNED BY NONE, die Standardeinstellung, gibt an, dass es keine solche Zuordnung gibt.
Hinweise
Wird verwendetDROP SEQUENCE, um eine Sequenz zu entfernen.
Sequenzen basieren auf bigint Arithmetik, sodass der Bereich den Bereich einer 8-Byte-Ganzzahl (-9223372036854775808 bis 9223372036854775807) nicht überschreiten darf.
Da Aufrufe niemals rückgängig gemacht werden, können Sequenzobjekte nicht verwendet werden, wenn eine „lückenlose“ nextval Zuweisung setval von Sequenznummern erforderlich ist.
In jeder Sitzung werden aufeinanderfolgende Sequenzwerte während eines Zugriffs auf das Sequenzobjekt zugewiesen und zwischengespeichert und die Werte des Sequenzobjekts entsprechend erhöht. last_value Bei den nächsten cache -1 Verwendungen von nextval innerhalb dieser Sitzung werden dann einfach die vorab zugewiesenen Werte zurückgegeben, ohne das Sequenzobjekt zu berühren. Somit gehen alle innerhalb einer Sitzung zugewiesenen, aber nicht verwendeten Zahlen verloren, wenn die Sitzung endet, was zu „Löchern“ in der Sequenz führt.
Darüber hinaus wird zwar garantiert, dass mehreren Sitzungen unterschiedliche Sequenzwerte zugewiesen werden, die Werte können jedoch bei der Berücksichtigung aller Sitzungen nicht in der richtigen Reihenfolge generiert werden. Bei einer cache Einstellung von 10 könnte Sitzung A beispielsweise die Werte 1.. 10 reservieren und nextval =1 zurückgeben, dann könnte Sitzung B die Werte 11.. 20 reservieren und =11 zurückgeben, bevor Sitzung A nextval =2 generiert hat. nextval Bei einer cache Einstellung von eins kann man also davon ausgehen, dass nextval Werte sequentiell generiert werden. Bei einer cache Einstellung größer als eins sollten Sie nur davon ausgehen, dass die nextval Werte alle unterschiedlich sind, nicht dass sie rein sequentiell generiert werden. Außerdem last_value wird der letzte Wert wiedergegeben, der für eine Sitzung reserviert wurde, unabhängig davon, ob er noch von zurückgegeben wurde oder nicht. nextval
Eine weitere Überlegung ist, dass ein in einer solchen Sequenz setval ausgeführter Vorgang von anderen Sitzungen erst bemerkt wird, wenn sie alle vorab zugewiesenen Werte aufgebraucht haben, die sie zwischengespeichert haben.
Beispiele
Erstellen Sie eine aufsteigende Sequenz mit dem Namenserial, beginnend bei 101:
CREATE SEQUENCE serial CACHE 65536 START 101;
Wählen Sie die nächste Zahl aus dieser Sequenz aus:
SELECT nextval('serial'); nextval --------- 101
Wählen Sie die nächste Zahl aus dieser Sequenz aus:
SELECT nextval('serial'); nextval --------- 102
Verwenden Sie diese Sequenz in einem INSERT Befehl:
INSERT INTO distributors VALUES (nextval('serial'), 'nothing');
Setzen Sie die Sequenz auf einen bestimmten Wert zurück, indem Siesetval:
SELECT setval('serial', 200); SELECT nextval('serial'); nextval --------- 201
Kompatibilität
CREATE SEQUENCEentspricht dem SQL-Standard, mit den folgenden Ausnahmen:
-
Das Abrufen des nächsten Werts erfolgt mithilfe der
nextval()Funktion anstelle desNEXT VALUE FORStandardausdrucks. -
Die
OWNED BYKlausel ist eine PostgreSQL-Erweiterung.