IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Importation d'un fichier csv vers une base de données PostgreSQL


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Importation d'un fichier csv vers une base de données PostgreSQL
    Bonjour,

    Je travaille sur un serveur mutualisé OVH et je souhaite importer un fichier csv, avec délimiteur '';'', dans une base Postgresql. J'ai copié le fichier csv dqns le répertoire www et j'ai lancé une commande de type SQL COPY FROM '/www/wp-includes/xxxxxx/liste_produits.csv' with delimiter ';' . Cela ne fonctionne est-ce quelqu'un a une suggestion ? J'ai bien sur fait toute sorte d'essai. Merci d'avance

  2. #2
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    Il peut y avoir plusieurs sources à ce problème, entre autres:
    -les permissions sur le fichier (l'user "postgres" peut-il y accéder)?
    -directive "quote" manquante, ce qui est problématique si les données texte contiennent le délimiteur (personnelement je préfère recourir à "\t" plutôt que des séparateur qui appartiennent à la langue naturelle)
    -format d'encodage (UTF-8, Latin1, etc...) différent entre le serveur Postgresql et le fichier, le plus rapide est alors de re-sauvergarder le fichier dans un éditeur de type notepad++ dans le format d'encodage des tables.
    etc...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    @CetTer sur un hebérgement OVH il n'y a pas d'accès à l'utilisateur postgres comme cela pourrait être sur une solution VPS.

    Le problème viens sûrement du fait que sur un hébergement mutualisé, OVH*le répertoire www n'est pas stocker à côté (sur la même machine) que la base de donnée ; ça explique le soucis de lancement de la commande sql qui ne trouvera jamais le chemin du script à lancer.

    D'après moi, le plus simple reste de charger le csv sur un base dédié et de transférer un dump , sur un schéma différent si besoin.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Si ton fichier CSV est accessible via le réseau, tu peux peut-être utiliser le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COPY FROM PROGRAM 'curl http://url_vers_fichier_csv.csv'
    ?
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Invité
    Invité(e)
    Par défaut
    OVH donne des accès pour les bases MySql, je viens de tomber sur la doc ici, mais malheureusement pas pour postgres.

    Il parle d'un accès ssh mais il n'est visiblement pas inclus dans mon offre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ssh monuser@ip_serveur_ftp 
    ssh: connect to ………… port 22: Connection refused

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Mais tu peux te connecter à ta base PostgreSQL non ? Avec pgAdmin par exemple.

    Ensuite tu exécutes des requêtes en prenant en compte que le process tourne sur une machine, et si tu n'as pas la possibilité d'accéder aux fichiers physiquement, tu peux les rendre accessibles en http et utiliser COPY FROM PROGRAM ainsi que curl pour récupérer le fichier et l'intégrer.
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  7. #7
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    Sinon du piping via la console shell pourrait fonctionner vu que "COPY' accède à stdin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat myfile | psql -c "COPY mytable (name, description, text) FROM stdin
    (mais il faut que le mot de passe soit dans le fichier .pgpass pour que sa saisie n'interfère pas avec le flux)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    Mais tu peux te connecter à ta base PostgreSQL non ? Avec pgAdmin par exemple.
    Hélas non je ne crois pas, il y a juste phppgadmin et il n'y a pas d'import de CSV avec cette interface.

    C'est pas terrible, j'imagine que les choses vont évoluer chez OVH, la solution étant relativement récente.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut test 1
    Bonjour,

    J'ai essaye COPY FROM PROGRAM 'curl
    http://xxxxx/yyyyy/liste_produits.csv' et j'obtiens :

    Erreur SQL :

    ERREUR: erreur de syntaxe sur ou près de « FROM »
    LINE 1: SELECT COUNT(*) AS total FROM (COPY FROM PROGRAM 'curl http:...

    Je vais essayer les autres solutions proposees, mais je n'ai pas tout compris.

    Merci


    ^

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut test 2
    J'ai ouvert mon fichier csv avec notpad++ et j'ai sauve le fichier avec un encodage UTF8 et la commande COPY FROM '/www/wp-includes/xxxxx/liste_produits_UTF8.csv' with delimiter ';' a échoué. Je crois que je vais abandonne et revenir a MYSQL

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut eclaircissement
    ''D'après moi, le plus simple reste de charger le csv sur un base dédié et de transférer un dump , sur un schéma différent si besoin.''

    Je ne comprends pas

    Tu parles d'une base MYSQL ?

    Je cree une base MYQL avec mon fichier CSV et ensuite je transfere un dump vers Postgesql ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut test 3
    J'ai importe mon fichier CSV sans emcombre dans une base MYSQL. J'exporte le code SQL et j'execute ce code dans phpPgAdmin et j'obtiens une erreur ici :

    CREATE TABLE IF NOT EXISTS `TABLE 1` (

    Quelqu'un a t-il une suggestion ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Non je parlais de faire sur une base Postgres tampon pour créer le dump ; quant au message d'erreur il suffit de ne pas cocher (ou décocher) la case « Paginer les résultats » dans l'interface phppgadmin.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pologne

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ce n'est pas claire pour moi ''base tampon postgresql''. Je ne vois pas justement comment créer cette base postgresql à partir du fichier CSV. Quelque chose doit m'échapper.
    Je compte clôturer cette discussion car tout est si simple avec mysql.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Désolé si je ne suis pas clair quand je parle d'une base tampon ; je pense à quelque chose en locale (en tous cas pas hébergé chez OVH).

    Pour ce qui est d'être plus simple avec MySql ; je dirais que la solution d'OVH n'est pas encore aussi aboutie côté Postresql qu'elle peut l'être pour la solution MySql.
    Ma comparaison entre les deux SGBD se résume par le fait que si l'un n'était pas soutenu par Oracle il aurait disparu (c'est que mon avis ).


    Maintenant si vous avez commencé votre application ou page web sur votre hébergement, c'est à cet endroit que vous devriez créer le formulaire de chargement de votre CVS.

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par pyrrhias Voir le message
    J'ai importe mon fichier CSV sans emcombre dans une base MYSQL. J'exporte le code SQL et j'execute ce code dans phpPgAdmin et j'obtiens une erreur ici :

    CREATE TABLE IF NOT EXISTS `TABLE 1` (

    Quelqu'un a t-il une suggestion ?
    Les apostrophes inversées ou backticks autour du nom de table ne sont supportées que par MySQL.
    Le standard SQL indique que c'est les guillemets qui doivent être utilisés pour ça, et c'est la règle que suit PostgreSQL.

    Ceci dit, le plus simple est de ne pas mettre d'espace au milieu d'un nom de table, même si c'est syntaxiquement valide, parce que c'est pénible à l'usage.
    En utilisant uniquement [a-z_0-9] et pas de mots réservés pour tous les identifiants, on n'a jamais besoin de guillemets.

  17. #17
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Le standard SQL indique que c'est les guillemets qui doivent être utilisés pour ça, et c'est la règle que suit PostgreSQL.
    Précision : il s'agit des guillemets doubles ", les guillemets simples ' étant utilisés pour encadrer les chaines de caractères.
    Citation Envoyé par estofilo Voir le message
    Ceci dit, le plus simple est de ne pas mettre d'espace au milieu d'un nom de table, même si c'est syntaxiquement valide, parce que c'est pénible à l'usage.
    En utilisant uniquement [a-z_0-9] et pas de mots réservés pour tous les identifiants, on n'a jamais besoin de guillemets.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/08/2010, 16h29
  2. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  3. Réponses: 2
    Dernier message: 21/09/2007, 18h47
  4. Réponses: 1
    Dernier message: 28/04/2006, 16h17
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo