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 :

Récupération avec COPY TO dans un fichier XML


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Récupération avec COPY TO dans un fichier XML
    Bonjour,


    Je suis un débutant en postgreSQL et cela fait deux semaines environ que je me familiarise avec ce nouvel environnement.
    Voilà mon problème
    J'exécute la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY (select function()) TO 'C:\\test\\monfichier.xml';
    function est une fonction renvoyant un TEXT que je voudrais mettre dans fichier de type XML car le texte renvoyé est de type XML évidemment.
    Jusque-là tout va bien, la commande s'exécute sans problème, le fichier est bien créé et tout a l'air de fonctionner.

    Mais lorsque j'ouvre le fichier, je remarque que tous les caractères d'échappement (\n,\r,\t...) n'ont pas été transformés en saut de ligne, retour chariot ou tabulation.
    J'ai eu beau chercher, je n'ai pas trouvé grand chose à ce sujet...

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Comment ces caractères se sont trouvés dans le XML?
    Je pense qu'à l'origine ces caractères doivent être supprimés. Après exportation dans un fichier XML, un bon éditeur XML saura formater le contenu.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Et bien en fait c'est moi qui ai inséré ces caractères dans le fichier pour que le document se forme directement avec les bonnes indentations.
    Mais avec votre solution, cela me paraît beaucoup plus simple, je n'y avais pas du tout pensé !

    Merci beaucoup en tout cas.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pourquoi ne pas insérer... des retours chariot/tabulations/... !?
    éventuellement en utilisant leur caractère ASCII avec la fonction CHR([codeASCII])

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Et bien en fait j'ai essayé également cette solution mais le résultat reste le même: cela affiche "\n \r ..."

    Néanmoins grâce à un petit contournement j'ai réussi à traduire les retours chariots, tabulations
    En effet grâce à la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY (SELECT FUNCTION()) TO 'C:\\test\\monfichier.xml' with csv;
    Les caractères d'échappement sont bien pris en compte.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Petit problème qui m'empêche d'ouvrir le fichier XML dans le navigateur,

    lorsque je lance la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY (SELECT FUNCTION()) TO 'C:\\test\\monfichier.xml' with csv;
    Le fichier se crée mais des guillemets " se placent automatiquement au début et à la fin du fichier.
    Y a t-il un moyen d'y remédier ? Ou bien y a t-il une autre méthode pour copier une chaîne de caractères dans un fichier ?

    Merci de votre réponse.

  7. #7
    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
    Le but de la commande COPY est de formater les données avant de les envoyer dans un fichier.

    Là les données sont déjà formatées et il faut mettre la sortie dans un fichier sans aucune transformation.
    Il n'y a pas d'option dans COPY qui dit "ne formate pas les données" donc il ne faut pas l'utiliser pour ça.

    Sous l'interpréteur psql ça se fait soit de l'extérieur (shell):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psql -Atc 'select mafonction()' > monfichier.xml
    Soit de l'intérieur de psql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    \t
    \a
    \o monfichier.xml
    select mafonction();
    \o
    Soit dans son propre programme qui fait le SELECT

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je comprends ce que vous voulez dire pour le COPY.

    Néanmoins cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COPY (SELECT FUNCTION()) TO 'C:\\test\\monfichier.xml' WITH csv;
    en fait se situe dans un script pl/pgSQL que j'ai créée. Elle se situe dans une boucle for qui crée des fichiers XML en continu et qui sont tous différents. Donc je ne crois pas que cela soit possible ni dans Shell ni à l'intérieur de psql...

    Sinon d'après ce que j'ai compris il est possible de faire un SELECT à l'intérieur du script et de directement le mettre à l'intérieur d'un fichier ?

  9. #9
    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
    Oui le fait d'être dans une fonction pl/pgsql pose problème parce que ce langage n'a pas de support pour faire des opération avec les fichiers.
    C'est voulu parce que c'est un langage "trusted".

    Les langages "untrusted" permettent ça mais ils ne sont pas installés de base (pl/perlu ou pl/python) ou difficiles à utiliser (le C)

    Moralité: c'est plus simple de le faire dans le client, derrière le SELECT, plutôt que dans des fonctions côté serveur.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Okay merci je comprends mieux maintenant.

    Donc cela veut dire il n'y a aucun moyen de le faire à partir d'un script ? C'est dommage je pensais avoir trouvé la bonne méthode pour créer des fichiers XML de façon automatique...


    Mais du coup, est ce qu'à partir du client il est possible de faire quelque chose pour qu'il crée mes fichiers en continu ? Ou bien cela veut dire que je dois le faire fichier par fichier ?

Discussions similaires

  1. Besoin d'aide pour mise en page avec 2 images, dans un fichier xml
    Par guillaume7684 dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 30/03/2011, 18h25
  2. [JDOM] Copie et suppresion d'un element dans un fichier xml
    Par riderfun dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/03/2009, 10h59
  3. ecrire dans un fichier xml avec php
    Par gilbertbicot dans le forum Langage
    Réponses: 1
    Dernier message: 21/01/2009, 13h10
  4. [XSLT]Récupération d'information dans un fichier XML
    Par LoDev dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/01/2008, 09h36
  5. Copy/paste dans un fichier xml en VB .Net
    Par RaphTIM dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2007, 21h07

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