Se desideri richiedere un ID e restituirlo, puoi utilizzare nextval()
, che fa avanzare la sequenza senza inserire alcun dato.
Nota che se questo è un SERIAL
colonna, è necessario trovare il nome della sequenza in base alla tabella e al nome della colonna, come segue:
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
Non vi è alcuna garanzia assoluta che vedrai questi ID tornare in ordine (la sequenza li genera in ordine, ma più sessioni possono rivendicare un ID e non utilizzarlo ancora, oppure ripristinare un INSERT
e l'ID non verrà riutilizzato) ma c'è la garanzia che saranno univoci, che normalmente è la cosa importante.
Se lo fai spesso senza utilizzare effettivamente l'ID, alla fine utilizzerai tutti i possibili valori di un integer
a 32 bit colonna (ovvero raggiungi il numero intero massimo rappresentabile), ma se la usi solo quando c'è un'alta probabilità di inserire effettivamente una riga con quell'ID dovrebbe essere OK.