From: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
---|---|
To: | Denis Bitouzé <dbitouze(at)wanadoo(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: [pgsql-fr-generale] Re: [pgsql-fr-generale] Copier de données depuis un fichier csv vers plusieurs tables |
Date: | 2011-12-02 17:33:43 |
Message-ID: | CAOBaU_Z4NbUMPvyJHWEpiu-Ye_noqyuTn5F9tRvXTJN3krBUPA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
2011/12/2 Denis Bitouzé <dbitouze(at)wanadoo(dot)fr>
> 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 ?
>
un drop ou truncate de la table d'importation, au choix. Cela dépend si ça
doit être fait souvent pour éviter de créer la table à chaque fois, ou si
vous ferez une procédure stockée pour faire le traitement par exemple. Le
tout étant d'être sur qu'il n'y a plus rien dedans à la fin du traitement.
> > 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; ?
>
Un accès concurrent comme création d'un étudiant durant l'importation ? Si
toutes les créations d'étudiant se passent avec la séquence il n'y aura
aucun risque de doublon sur l'identifiant, juste des étudiants importés
avec des numéros non consécutifs.
From | Date | Subject | |
---|---|---|---|
Next Message | Denis Bitouzé | 2011-12-02 21:07:08 | Re: Re: [pgsql-fr-generale] Re: [pgsql-fr-generale] Copier de données depuis un fichier csv vers plusieurs tables |
Previous Message | Denis Bitouzé | 2011-12-02 17:26:09 | Re: Copier de données depuis un fichier csv vers plusieurs tables |