PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL - nächster serieller Wert in einer Tabelle

Wenn Sie eine ID beanspruchen und zurückgeben möchten, können Sie nextval() , die die Sequenz vorrückt, ohne Daten einzufügen.

Beachten Sie, dass dies ein SERIAL ist -Spalte müssen Sie den Namen der Sequenz basierend auf dem Tabellen- und Spaltennamen wie folgt ermitteln:

Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;

Es gibt keine hundertprozentige Garantie dafür, dass diese IDs in der richtigen Reihenfolge zurückkommen (die Sequenz generiert sie der Reihe nach, aber mehrere Sitzungen können eine ID beanspruchen und sie noch nicht verwenden oder einen INSERT und die ID wird nicht wiederverwendet), aber es gibt eine Garantie, dass sie eindeutig sind, was normalerweise das Wichtigste ist.

Wenn Sie dies häufig tun, ohne die ID tatsächlich zu verwenden, werden Sie schließlich alle möglichen Werte einer 32-Bit-Ganzzahl aufbrauchen Spalte (d. h. die maximal darstellbare Ganzzahl erreichen), aber wenn Sie es nur verwenden, wenn eine hohe Wahrscheinlichkeit besteht, dass Sie tatsächlich eine Zeile mit dieser ID einfügen, sollte es in Ordnung sein.