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

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

In response to

Responses

Browse pgsql-fr-generale by date

  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