Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/12/2011, 11h07   #1
Thomas77380
Candidat au titre de Membre du Club
 
Inscription : novembre 2008
Messages : 101
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 101
Points : 14
Points : 14
Par défaut Importer des données excel dans mes tables Postgres

Bonjour,

je suis débutant en Postgres, je cherche à remplir ma base avec des données contenues dans différents fichiers excel.
J'ai trouvé un ou deux sujets similaires sur le site mais je n'ai pas réussi à aller au bout de la procédure.
J'ai commencé par transformé mon fichier excel en un fichier "csv", puis j'ai essayé d'importer les données dans mes tables en utilisant la fonction "COPY", mais impossible d’exécuter cette commande correctement.

Si quelqu'un pouvait me donner un exemple

J'aurai une autre question, j'ai crée ma base (enfin les différentes tables, je n'ai encore rien rempli) et je voulais savoir comment vous faisiez pour remplir vos tables avec vos données excel dans mon cas : dans chacun de mes fichiers excel j'ai des données qui appartiennnent à différentes tables, je n'ai pas un fichier pour une table (je ne suis pas sur d'être très clair ).
Donc ma question est : dois-je modifier chacun de mes fichiers plusieurs fois pour garder uniquement les colonnes de données relatives à une table ? et ainsi de suite jusqu'a avoir tout rempli ?

A la base je pensais utiliser un "simple" scrypt python mais je n'ai pas trouvé d'exemple sur internet.

Je travail simplement via le terminal, je n'utilise pas pgAdmin.



Merci à vous
Thomas77380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h40   #2
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 158
Points : 3 491
Points : 3 491
Citation:
Envoyé par Thomas77380 Voir le message
Bonjour,

J'aurai une autre question, j'ai crée ma base (enfin les différentes tables, je n'ai encore rien rempli) et je voulais savoir comment vous faisiez pour remplir vos tables avec vos données excel dans mon cas : dans chacun de mes fichiers excel j'ai des données qui appartiennnent à différentes tables, je n'ai pas un fichier pour une table (je ne suis pas sur d'être très clair ).
Donc ma question est : dois-je modifier chacun de mes fichiers plusieurs fois pour garder uniquement les colonnes de données relatives à une table ? et ainsi de suite jusqu'a avoir tout rempli ?
Bonjour,

Deux solutions ici :
- faire un fichier CSV par table.
- insérez vos données actuelle dans des tables sas (donc vous ne toucher pas vos fichier CVS) et ensuite traitement de ces tables sas pour injecter les données dans vos tables cibles

Concernant le COPY, je n'ia jamasi utilisé mais y a de la doc + exemple ici : http://www.postgresql.org/docs/9.1/static/sql-copy.html

Faites des tests avec des exemples simple au début..
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 13h59   #3
tom77380
Futur Membre du Club
 
Tulate Leke
Inscription : janvier 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Tulate Leke

Informations forums :
Inscription : janvier 2010
Messages : 53
Points : 15
Points : 15
Bonjour, merci pour votre réponse,

je m'étais en effet aidé de votre lien pour me servir de la fonction "COPY", voici l'instruction que je tape :



Code :
1
2
 
COPY gene FROM 'Bureau/Basededonnees/genes.csv' | STDIN ;
j'ai également essayé

Code :
COPY gene FROM {'genes.csv' | STDIN }
je tente donc d'insérer dans ma table "gène" les données contenues dans le fichier genes.csv, cependant cette instruction semble être incorrecte, surement une erreur de syntaxe que je ne trouve pas.

Voici l'erreur :
Citation:

ERROR: syntax error at or near "{"
LINE 1: COPY gene FROM {'genes.csv' | STDIN }
tom77380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 14h24   #4
punkoff
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 2 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 2 158
Points : 3 491
Points : 3 491
bonjour,

n'utilisez pas "{".

Quel est le message d'erreur de la 1ere commande ?
M'est d'avis que votre path est mal écrit (il manque soit un / soit c:\..)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 16h40   #5
tom77380
Futur Membre du Club
 
Tulate Leke
Inscription : janvier 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Tulate Leke

Informations forums :
Inscription : janvier 2010
Messages : 53
Points : 15
Points : 15
EN effet j'ai ajouté un '/' au début de mon path, cependant j'obtiens toujours un message d'erreur :



Code :
COPY gene FROM '/Bureau/Basededonnees/genes.csv' | STDIN;


Citation:
ERROR: syntax error at or near "|"
j'ai tenté d'enlever ce caractère mais rien n'y fait.
tom77380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 17h27   #6
xavier-Pierre
Membre confirmé
 
Homme
Inscription : janvier 2006
Messages : 232
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations forums :
Inscription : janvier 2006
Messages : 232
Points : 244
Points : 244
et tout simplement
Code :
COPY gene FROM '/Bureau/Basededonnees/genes.csv'
si le caractere de separation est une tabulation
si le caractere est bien une virgule
Code :
COPY gene FROM '/Bureau/Basededonnees/genes.csv' WITH csv
on peut rajouter header si le fichier d'origine a les entêtes de colonne
xavier-Pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 19h14   #7
tom77380
Futur Membre du Club
 
Tulate Leke
Inscription : janvier 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Tulate Leke

Informations forums :
Inscription : janvier 2010
Messages : 53
Points : 15
Points : 15
merci pour votre réponse, je n'ai plus de message d'erreur, mais le remplissage ne se fait pas.

Je dispose d'un fichier excel sans entête avec une seule colonne (une succession de numéros). Je pense que ma requête ne colle pas avec l'architecture de mon fichier.

J'ai testé ceci


Code :
COPY chromosome FROM '/Bureau/Basededonnees/test_edit.csv'
le fichier en question contient donc une seule colonne sans entête.

Auriez vous une idée de pourquoi les informations ne sont pas transmises ? (lorsque je fais
Code :
SELECT* FROM chromosome;
je vois que ma table est vide :/ )

merci à vous
tom77380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 17h01   #8
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Pour ma part dans mon install Windows (XP, postgres-9.1) cette commande
Citation:
COPY chromosome FROM '/Bureau/Basededonnees/test_edit.csv'
ne passera pas, d'une part parce que le bureau ne se trouve pas dans un répertoire /Bureau à la racine du disque, et d'autre part parce même en mettant le bon chemin, le processus postgres n'a pas le droit de lire dedans. Mais ça produit un message d'erreur dans tous les cas.

En revanche ça passera sous cette forme là, avec le \copy de psql:
Code :
\copy chromosome FROM 'c:/Documents and Settings/daniel/Bureau/Basededonnees/test_edit.csv'
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 20h01   #9
tom77380
Futur Membre du Club
 
Tulate Leke
Inscription : janvier 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Tulate Leke

Informations forums :
Inscription : janvier 2010
Messages : 53
Points : 15
Points : 15
ça fonctionne merci
tom77380 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 14h34   #10
nabil.brarou
Membre à l'essai
 
Homme
Étudiant
Inscription : juin 2012
Messages : 116
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : juin 2012
Messages : 116
Points : 20
Points : 20
Bonjour,

En essayant d'importer mes données d'un fichier CSV à une base de données qui contient une table de 23 champs correspondant aux nombres de mes colonnes du tableau CSV, J'ai eu cette Erreur qui s'affiche dans la console shell (psql):
ERREUR: syntaxe en entrée invalide pour l'entier :<Code du département>

Contexte: COPY election, ligne1, colonne code_departement:<Code du département>

J'avais mis le code_departement de la table du type Integer.

Comment faire svp??
nabil.brarou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 00h20   #11
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Quand la ligne 1 contient des noms de colonnes et pas des données, ce qui est manifestement le cas ici au vu de l'erreur, il faut préciser CSV HEADER dans la commande \copy ou COPY.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h00.


 
 
 
 
Partenaires

Hébergement Web