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.
Sequenz-Bearbeitungsfunktionen
In diesem Abschnitt werden Funktionen für die Bearbeitung von Sequenzobjekten beschrieben, die auch Sequenzgeneratoren oder einfach Sequenzen genannt werden. Sequenzobjekte sind spezielle einzeilige Tabellen, die mit CREATE SEQUENCE erstellt wurden. Sequenzobjekte werden häufig verwendet, um eindeutige Bezeichner für Zeilen einer Tabelle zu generieren. Die Sequenzfunktionen bieten einfache, für mehrere Benutzer sichere Methoden zum Abrufen aufeinanderfolgender Sequenzwerte aus Sequenzobjekten.
Wichtig
Bei der Verwendung von Sequenzen sollte der Cache-Wert sorgfältig abgewogen werden. Weitere Informationen finden Sie im Callout „Wichtig“ auf der CREATE SEQUENCE Seite.
Hinweise zur optimalen Verwendung von Sequenzen, die auf Workload-Mustern basieren, finden Sie unterArbeiten mit Sequenzen und Identitätsspalten.
| Funktion | Description |
|---|---|
nextval ( regclass ) → bigint |
Bringt das Sequenzobjekt auf seinen nächsten Wert zurück und gibt diesen Wert zurück. Dies erfolgt atomar: Selbst wenn mehrere Sitzungen nextval gleichzeitig ausgeführt werden, erhält jede Sitzung sicher einen eigenen Sequenzwert. Wenn das Sequenzobjekt mit Standardparametern erstellt wurde, geben aufeinanderfolgende nextval Aufrufe steigende Werte zurück, die mit 1 beginnen. Andere Verhaltensweisen können durch die Verwendung geeigneter Parameter im CREATE SEQUENCE Befehl erreicht werden. Diese Funktion erfordert USAGE unsere UPDATE Rechte für die Sequenz. |
setval ( regclass, bigint [, boolean ] ) → bigint |
Legt den aktuellen Wert des Sequenzobjekts und optional sein is_called Flag fest. Das Formular mit zwei Parametern setzt das last_value Feld der Sequenz auf den angegebenen Wert und sein is_called Feld auftrue, was bedeutet, dass das nächste Feld die Sequenz weiterleitet, bevor ein Wert zurückgegeben nextval wird. Der Wert, der gemeldet wird, currval wird ebenfalls auf den angegebenen Wert gesetzt. is_calledKann in der Form mit drei Parametern entweder auf true oder false gesetzt werden. truehat den gleichen Effekt wie das Formular mit zwei Parametern. Wenn es auf gesetzt istfalse, gibt der nächste nextval Wert genau den angegebenen Wert zurück, und die Weiterentwicklung der Sequenz beginnt mit dem Folgenden. nextval Außerdem wird der von gemeldete Wert hier currval nicht geändert. Beispiel: Das von zurückgegebene Ergebnis setval ist nur der Wert des zweiten Arguments. Für diese Funktion sind UPDATE Zugriffsrechte für die Sequenz erforderlich. |
currval ( regclass ) → bigint |
Gibt den zuletzt von nextval für diese Sequenz in der aktuellen Sitzung erhaltenen Wert zurück. (Es wird ein Fehler gemeldet, wenn nextval diese Sequenz in dieser Sitzung noch nie aufgerufen wurde.) Da dies einen sitzungslokalen Wert zurückgibt, gibt es eine vorhersehbare Antwort darauf, ob andere Sitzungen nextval aufgrund der aktuellen Sitzung ausgeführt wurden oder nicht. Diese Funktion erfordert unsere USAGE SELECT Rechte für die Sequenz. |
lastval () → bigint |
Gibt den Wert zurück, der zuletzt von nextval in der aktuellen Transaktion zurückgegeben wurde. Diese Funktion ist identisch mitcurrval, außer dass sie nicht den Sequenznamen als Argument verwendet, sondern sich auf die Sequenz bezieht, auf die in der aktuellen Transaktion zuletzt angewendet nextval wurde. Es ist ein Fehler, sie aufzurufenlastval, wenn sie in der aktuellen Transaktion nextval noch nicht aufgerufen wurde. Diese Funktion erfordert USAGE unsere SELECT Rechte für die zuletzt verwendete Sequenz. |
Warnung
Der von abgerufene Wert wird nextval nicht zur Wiederverwendung zurückgefordert, wenn die aufrufende Transaktion später abgebrochen wird. Das bedeutet, dass Transaktionsabbrüche oder Datenbankabstürze zu Lücken in der Reihenfolge der zugewiesenen Werte führen können. Das kann auch ohne einen Transaktionsabbruch passieren. Zum Beispiel berechnet eine INSERT ON CONFLICT withan-Klausel das to-be-inserted Tupel, einschließlich aller erforderlichen nextval Aufrufe, bevor ein Konflikt erkannt wird, der dazu führen würde, dass sie stattdessen der ON CONFLICT Regel folgt. Daher können die Sequenzobjekte von Aurora DSQL nicht verwendet werden, um „lückenlose“ Sequenzen zu erhalten.
Ebenso setval sind Änderungen des Sequenzstatus, die von vorgenommen wurden, für andere Transaktionen sofort sichtbar und werden nicht rückgängig gemacht, wenn die aufrufende Transaktion zurückgesetzt wird.
Die Sequenz, mit der eine Sequenzfunktion arbeiten soll, wird durch ein regclass Argument angegeben, das einfach die OID der Sequenz im pg_class Systemkatalog ist. Sie müssen die OID jedoch nicht manuell nachschlagen, da der Eingangskonverter des regclass Datentyps die Arbeit für Sie erledigt. Einzelheiten finden Sie in der PostgreSQL-Dokumentation zu Object Identifier Types