Ако искате да поискате ID и да го върнете, можете да използвате nextval()
, който напредва в последователността, без да вмъква данни.
Имайте предвид, че ако това е SERIAL
колона, трябва да намерите името на последователността въз основа на името на таблицата и колоната, както следва:
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
Няма чугунена гаранция, че ще видите тези идентификатори да се връщат в ред (последователността ги генерира в ред, но множество сесии могат да поискат идентификатор и все още да не го използват или да върнат обратно INSERT
и идентификаторът няма да се използва повторно), но има гаранция, че те ще бъдат уникални, което обикновено е важното.
Ако правите това често, без действително да използвате идентификатора, в крайна сметка ще използвате всички възможни стойности на 32-битово integer
колона (т.е. достигане на максималното цяло число, което може да се представи), но ако го използвате само когато има голяма вероятност действително да вмъкнете ред с този идентификатор, трябва да е ОК.