Si vous souhaitez réclamer un ID et le renvoyer, vous pouvez utiliser nextval()
, qui fait avancer la séquence sans insérer de données.
Notez que s'il s'agit d'un SERIAL
colonne, vous devez trouver le nom de la séquence en fonction du nom de la table et de la colonne, comme suit :
Select nextval(pg_get_serial_sequence('my_table', 'id')) as new_id;
Il n'y a aucune garantie absolue que vous verrez ces identifiants revenir dans l'ordre (la séquence les génère dans l'ordre, mais plusieurs sessions peuvent réclamer un identifiant et ne pas encore l'utiliser, ou annuler un INSERT
et l'identifiant ne sera pas réutilisé) mais il y a une garantie qu'ils seront uniques, ce qui est normalement l'important.
Si vous faites cela souvent sans réellement utiliser l'ID, vous finirez par utiliser toutes les valeurs possibles d'un integer
32 bits colonne (c'est-à-dire atteindre l'entier représentable maximum), mais si vous ne l'utilisez que lorsqu'il y a de fortes chances que vous insériez réellement une ligne avec cet ID, cela devrait être OK.