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

La norme SQL évolue : tirez le meilleur d'un SGBD qui la respecte en écrivant du SQL moderne avec en complément PL/pgSQL, php, java etc.
Répondre
Phil
Administrateur du site
Messages : 292
Enregistré le : mar. 1 sept. 2015 00:38
Localisation : France
Contact :

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

Message 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;
Cdlt. Phil - pgphil.ovh
Répondre