Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    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

  2. #2
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 2 865
    Points : 4 649
    Points
    4 649

    Par défaut

    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..

  3. #3
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    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 :

    ERROR: syntax error at or near "{"
    LINE 1: COPY gene FROM {'genes.csv' | STDIN }

  4. #4
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 2 865
    Points : 4 649
    Points
    4 649

    Par défaut

    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:\..)

  5. #5
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    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;


    ERROR: syntax error at or near "|"
    j'ai tenté d'enlever ce caractère mais rien n'y fait.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    janvier 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : janvier 2006
    Messages : 240
    Points : 256
    Points
    256

    Par défaut

    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

  7. #7
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    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

  8. #8
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 803
    Points : 2 583
    Points
    2 583

    Par défaut

    Pour ma part dans mon install Windows (XP, postgres-9.1) cette commande
    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'

  9. #9
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    ça fonctionne merci

  10. #10
    Nouveau Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2012
    Messages
    156
    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 : 156
    Points : 27
    Points
    27

    Par défaut

    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??

  11. #11
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 803
    Points : 2 583
    Points
    2 583

    Par défaut

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •