Page 1 sur 1

Appliquer une valeur de séquence sur une colonne ID lors d'une copie

Posté : ven. 8 mars 2024 14:36
par Phil
Merci à Chantal pour sa question :

"Je voudrais charger un fichier plat au format csv dans une table , en utilisant COPY , sachant que l’id technique de cette table est géré par une séquence.
Du coup, lors de l’exécution de COPY, je voudrais invoquer une séquence en appelant nextval(‘seq_toto’) par exemple.
Est-ce que cela est possible ?"


Réponse :

Le plus simple est d'avoir une colonne de type serial ou avec la propriété identity.
Avec une séquence indépendante, modifier la valeur par défaut de la colonne de l'id technique, faire la copie, supprimer la valeur par défaut.

Exemple avec une séquence s1 pour une table t1, colonne de la clé technique c1 :

Code : Tout sélectionner

alter table t1 alter c1 set default nextval('s1');
... effectuer la copie avec \copy t1(c2,c3 etc.) from ...

Après la copie :

Code : Tout sélectionner

alter table t1 alter c1 drop default;