Mettre à jour le numéro de séquence après un import

Contexte :

  • un import doit être réalisé dans une ou plusieurs tables, à partir de données externes
  • la table contient une clé primaire auto-incrémentée, par le mécanisme des séquences
  • la procédure d'import force la clé à partir des données fournies (pas d'utilisation de la séquence)

Après import, la séquence n'est plus à jour : l'ajout d'un nouvel enregistrement échouera pour une raison de clé dupliquée, la séquence fournissant une clé qui a (probablement) été importée.

Pour mettre à jour la séquence, après l'import, le plus simple est d'utiliser la commande suivante :

select setval('table_table_id_seq',(select max(table_id)  from table));

Cette commande récupère la valeur max de la clé, pour la stocker dans la séquence.

Attention : comme il s'agit d'une opération sur une séquence, celle-ci est insensible aux transactions (exécution dans tous les cas de figure, pour éviter les blocages transactionnels - le commit ou le rollback ne servent à rien).