Pokud chcete ID nárokovat a vrátit jej, můžete použít nextval()
, který posune sekvenci dopředu bez vložení jakýchkoli dat.
Všimněte si, že pokud se jedná o SERIAL
musíte najít název sekvence podle názvu tabulky a sloupce následovně:
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
Neexistuje žádná železná záruka, že uvidíte, že se tato ID vrátí v pořádku (sekvence je vygeneruje v pořadí, ale několik relací si může ID nárokovat a ještě je nepoužívat, nebo vrátit zpět INSERT
a ID nebude znovu použito), ale existuje záruka, že budou jedinečné, což je obvykle důležité.
Pokud to děláte často bez skutečného použití ID, nakonec využijete všechny možné hodnoty 32bitového integer
sloupec (tj. dosáhnout maximálního reprezentativního celého čísla), ale pokud jej použijete pouze tehdy, když je vysoká pravděpodobnost, že skutečně vložíte řádek s tímto ID, mělo by to být v pořádku.