Jeśli chcesz uzyskać identyfikator i go zwrócić, możesz użyć nextval()
, który przesuwa sekwencję bez wstawiania żadnych danych.
Zwróć uwagę, że jeśli jest to SERIAL
kolumna, musisz znaleźć nazwę sekwencji na podstawie nazwy tabeli i kolumny w następujący sposób:
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
Nie ma gwarancji, że zobaczysz te identyfikatory w kolejności (sekwencja generuje je w kolejności, ale wiele sesji może zażądać identyfikatora i jeszcze go nie używać lub wycofać INSERT
a identyfikator nie zostanie ponownie wykorzystany), ale istnieje gwarancja, że będą unikalne, co zwykle jest ważne.
Jeśli robisz to często bez faktycznego używania identyfikatora, w końcu wykorzystasz wszystkie możliwe wartości 32-bitowej integer
kolumna (tj. osiągnij maksymalną reprezentowaną liczbę całkowitą), ale jeśli użyjesz jej tylko wtedy, gdy istnieje duża szansa, że faktycznie wstawisz wiersz o tym identyfikatorze, powinno być OK.