Séquence corrompue dans pgSQL

Lors d’une migration de base de données un peu barbare il m’est peut-être déjà arrivé un jour de casser la séquence d’un index.

Par exemple, si une table possède 8944 lignes avec une colonne ID (étant une séquence), il est fort à parier que la prochaine valeur de cette colonne soit 8945 … dans ma situation cette valeur était de 241 (?).

En gros, pour la faire courte, la séquence était corrompue.

Pour corriger cette anomalie avant que vos fichiers de logs explosent, on commence par identifier le nom exact de la séquence :

SELECT pg_get_serial_sequence('items', 'id');

Cela nous permet de vérifier avec un nextval la prochaine valeur théorique :

SELECT nextval('public.items_id_seq');

Si cette valeur est effectivement incohérente, nous pouvons la modifier arbitrairement à l’aide d’un setval ;

SELECT setval('public.items_id_seq', 8945);