Si desea reclamar una identificación y devolverla, puede usar nextval()
, que avanza la secuencia sin insertar ningún dato.
Tenga en cuenta que si se trata de un SERIAL
columna, debe encontrar el nombre de la secuencia según el nombre de la tabla y la columna, de la siguiente manera:
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
No existe una garantía absoluta de que verá que estos ID vuelven en orden (la secuencia los genera en orden, pero varias sesiones pueden reclamar un ID y no usarlo todavía, o revertir un INSERTAR
y el ID no se reutilizará) pero hay una garantía de que serán únicos, que normalmente es lo importante.
Si hace esto a menudo sin usar la ID, eventualmente usará todos los valores posibles de un entero
de 32 bits columna (es decir, alcanzar el número entero máximo representable), pero si lo usa solo cuando hay una alta probabilidad de que realmente esté insertando una fila con esa ID, debería estar bien.