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 :

commande pour insérer une table dans un fichier


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut commande pour insérer une table dans un fichier
    Bonjour à tous,
    Voilà mon problème j'aimerai copier une table dans un fichier. Avec MySql la commande de base est :

    select [colonnes] into outfile [repertoire/nom_fichier] fields terminatede by ';' from [nom_table] where [condition]
    Ma question est la suivante : Sous postgres, quelle est la commande équivalente sous postgres ???

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai trouvé ceci mais j'ai un message d'erreur
    est-ce que la commande est correcte ou est-ce juste une erreur de synthaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    COPY (SELECT * FROM edw_object_1_ref_tmp WHERE date='20070313') TO '/home/cb21101_gsm20101_dev/upload/table_tmp.txt';
    Warning: PostgreSQL query failed: ERROR: syntax error at or near "(" at character 6 in

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par mix_35
    Bonjour à tous,
    Voilà mon problème j'aimerai copier une table dans un fichier. Avec MySql la commande de base est :



    Ma question est la suivante : Sous postgres, quelle est la commande équivalente sous postgres ???
    Dans psql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT [colones] * FROM [nom_table] where [condition] [group by … order by …] \g filename
    pour concaténer à un fichier existant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT [colones] * FROM [nom_table] where [condition] [group by … order by …] \g|cat >> /absolute/path/filename
    dans un terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'query' | psql [options] database >> /absolute/path/filename

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    pour ce qui est de l'erreur de ( dans le copy, c'est une instruction valide à partir de la version 8.2.
    pour les versions antérieurs, on ne peut utiliser copy qu'avec une table en indiquant éventuellement les colonnes.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    dans ma page php j'ai remplacé mon code par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
    La table n'est pas copiée dans le fichier

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    et peut-on rajouter une conidtion where dans le copy pour une table donnée pour les versions antérieures à la 8.2

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par mix_35
    dans ma page php j'ai remplacé mon code par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
    La table n'est pas copiée dans le fichier
    normal :

    \g est transformé par PHP en g (g escaped == g)
    il faut préserver le \ en le doublant… \\g

    (vous pouvez aussi mettre le query dans un scrip shell et lancer l'exec de celui-ci dans PHP en passant les arguments au script…)

    n'oubliez pas que pour générer le fichier celui qui exécute le code doit avoir les droits d'accès au directory dans lequel vous voulez écrire le fichier :

    si vous utilisez COPY c'est le daemon postgres qui doit avoir accès à ce dossier,
    si vous faites l'export côté PHP c'est le web server qui doit y avoir accès
    si vous faites l'export dans un script shell c'est le owner du script… (chown…)

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    Citation Envoyé par mix_35
    dans ma page php j'ai remplacé mon code par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("/.../psql SELECT * FROM ".$this->object_ref." WHERE date='".$this->day."' \g '".$file_tmp."'");
    La table n'est pas copiée dans le fichier
    la requete est en fait envoye en tant qu'argument à la commande psql, ce qui ne marche pas, il faut l'envoyer en tant qu'entrée standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo requete | psql base > fichier
    pour ce qui est de copy, on ne peut mettre une condition avant 8.2, par contre on peut créer une table temporaire regroupant les enregistrements de la requete et ensuite la copier avec copy dans un fichier

Discussions similaires

  1. Commande pour remplacer une ligne dans un fichier.txt
    Par ludobspp dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 07/11/2013, 08h19
  2. commande pour supprimer une ligne dans un fichier
    Par bomonde dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 27/09/2010, 10h58
  3. Réponses: 3
    Dernier message: 19/02/2010, 09h28
  4. Script pour insérer une ligne dans un fichier csv
    Par StéphanieB. dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 05/01/2010, 11h19
  5. Commande pour insérer une variable dans un script
    Par sliderman dans le forum Linux
    Réponses: 2
    Dernier message: 10/12/2007, 15h53

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