From: | Denis Bitouzé <dbitouze(at)wanadoo(dot)fr> |
---|---|
To: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-fr-generale] Copier de données depuis un fichier csv vers plusieurs tables |
Date: | 2011-12-02 17:24:50 |
Message-ID: | 20111202182450.7d6405e7@wanadoo.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Le vendredi 02/12/11 à 16h43,
Julien Rouhaud <rjuju123(at)gmail(dot)com> a écrit :
> Non, mon idée était de faire une table d'importation de ce genre :
> CREATE TABLE etudiant_import (
> id_etudiant integer DEFAULT nextval('seq_etu'),
> nom_etudiant varchar,
> prenom_etudiant varchar);
Ah OK, c'est bien sûr mieux.
> (la syntaxe n'est peut-être pas bonne, c'est juste pour montrer le but
> d'associer le champ id_etudiant de cette table temporaire à la
> séquence de la vraie table etudiants).
Non, non, c'est OK.
> Ensuite, l'idée est d'importer dans la table etudiant_import sans la
> colonne id_etudiant (donc en utilisant la séquence) avec le fichier
> csv dont vous disposez.
> Ex :
> COPY etudiant_import (nom_etudiant,prenom_etudiant) FROM
> '/home/bitouze/etudiants.csv' WITH DELIMITER ',';
OK.
> Du coup, la table etudiant_import contient les étudiants qui viennent
> d'être importés avec leur clé finale (pas de doublon possible). Il ne
> reste qu'a les copier dans la table etudiants
OK, fait avec :
insert into etudiants(id_etu,nom_etu,prenom_etu) select * from
etudiant_import ;
> et dans la table etudiants_promotions à partir de cette table,
OK, fait avec :
insert into etudiants_promotions (id_etu,id_promotion) SELECT id_etu,42
from etudiant_import ;
> qui ne contient donc que la dernière importation. Une fois la copie
> effectuée un truncate de la table
Ou un DROP suivi d'un CREATE ?
> et l'importation devrait se passer sans trop de risque d'erreur.
Il faudrait juste s'assurer qu'il n'y a pas d'accès concurrent à la
base etudiants. Est-ce le rôle d'un trigger comme suggéré par Cédric ?
Ou bien est-ce le rôle d'un BEGIN; ... COMMIT; ?
Merci !
--
Denis
From | Date | Subject | |
---|---|---|---|
Next Message | Denis Bitouzé | 2011-12-02 17:26:09 | Re: Copier de données depuis un fichier csv vers plusieurs tables |
Previous Message | Julien Rouhaud | 2011-12-02 15:43:35 | Re: [pgsql-fr-generale] Copier de données depuis un fichier csv vers plusieurs tables |