Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Techniques informatiques

PostgreSQL : recalculer l'auto-incrément après un DELETE

04/01/2026

En base de données, il existe des différences importantes entre un TRUNCATE et un DELETE :

  • Le DELETE peut faire une suppression partielle des lignes d'une table alors que le TRUNCATE vide toute la table.
  • Chaque suppression d'un DELETE peut être annulée lorsqu'elle est utilisée dans une transaction (elle est du coup plus lente à s'exécuter).
  • Le DELETE active les triggers éventuellement définis, à l'inverse du TRUNCATE, exécutant les suppressions en cascade dans les autres tables grâce aux clés étrangères.
  • Le DELETE ne réinitialise pas la valeur des champs de type SERIAL (auto-incrément).

Sur ce dernier point, il est intéressant de comprendre qu'en cas de suppression d'une partie des lignes d'une table par un DELETE, les prochaines insertions continueront avec la dernière valeur enregistrée pour la séquence.

Les séquences ayant une limite, si cette valeur maximale est atteinte, plus aucune insertion ne se fera. Pour éviter cela autant que possible, voici un code SQL à utiliser après une suppression de lignes : il va recalculer la valeur maximale de la séquence et la fixer.

SELECT SETVAL( pg_get_serial_sequence('table', 'id'),COALESCE((SELECT MAX(id) FROM TABLE), 0)+1, FALSE);

Remplacez table par le nom de votre table et id par le champ de type serial.

Cette clause SQL n'a évidemment d'intérêt que si les lignes avec la plus grande valeur d'auto-incrément sont supprimées.

Dernière modification le 04/01/2026 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations