Re: [pgsql-fr-generale] Re: [pgsql-fr-generale] Copier de données depuis un fichier csv vers plusieurs tables

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.

In response to

Responses

Browse pgsql-fr-generale by date

  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