Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Discussion: COPY TO spécifique

  1. #1
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 24
    Points : 6
    Points
    6

    Par défaut COPY TO spécifique

    Bonjour,

    J'aimerais savoir s'il est possible (et comment) d'obtenir un export CSV d'une table en passant par la commande COPY TO sans que les champs NULL soient délimités par des "" ?

    Requête :
    Code :
    COPY (Ma requête) TO '/tmp/titi.csv' WITH DELIMITER ';' CSV;
    Je ne sais pas si un paramètre qui ressemblerait à un QUOTE 'NULL' existe.

    Merci d'avance !!!

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

    Où ça un délimiteur?

    Code :
     copy (SELECT 'abc',NULL,NULL,'efg') TO stdout WITH delimiter ';' csv;
    Résultat:
    abc;;;efg

  3. #3
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 24
    Points : 6
    Points
    6

    Par défaut

    Bonjour et tout d'abord merci pour la réponse !

    En réalité mon problème provient du fait que la commande COPY balise par défaut les données NULL par des " ".
    Certaines données sont NULL, d'autres non et cela sur une même colonne.
    Par conséquent, je ne peux pas forcer l'attribution de la valeur NULL sur une colonne donnée.

    Comment pourrais-je forcer la non attribution des " " dans le cadre de données NULL sur n'importe quelle colonne de ma table ? (j'aimerais qu'il n'y ait aucun balisage).

    Merci d'avance.

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

    Citation Envoyé par zoharcryss Voir le message
    En réalité mon problème provient du fait que la commande COPY balise par défaut les données NULL par des " ".
    Si c'était le cas, la commande copy que j'ai mis en exemple sortirait des guillemets.
    Or il se trouve qu'elle n'en sort aucun.

  5. #5
    Invité régulier
    Inscrit en
    juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : juillet 2009
    Messages : 24
    Points : 6
    Points
    6

    Par défaut

    Effectivement la commande COPY ci-dessus remonte des champs NULL sans " " mais ce n'est toujours pas ce dont j'ai besoin.
    Je m'explique, en forcant les champs (SELECT 'abc',NULL,NULL,'efg') il n'y a aucun possibilité de sortir de ces colonnes les données qui y sont inscritent. Certaines données de ces colonnes sont effectivement NULL mais d'autres non donc je ne peux pas employer cette commande dans la mesure ou elle force les colonnes 2 et 3 à justement ne rien afficher.

    Il faudrait :

    Si les données sont NULL (qu'importe la colonne) qu'elles ne soient pas entourées de " ".

    Exemple :

    colonne 1; colonne 2; colonne 3

    A. Deuxième colonne NULL. Le format de sortie standard est le suivant :
    toto;"";titi

    Il faudrait :
    toto;;titi

    B. Troisième colonne NULL. Le format de sortie standard est le suivant :
    toto;tata;""

    Il faudrait :
    toto;tata;

    As-tu une idée ? Si il y a besoin de plus d'explication n'hésitez pas à me le faire savoir

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

    Je ne peux pas reproduire pas le problème dont tu parles avec PG 9.1
    Soit une table abc avec 3 colonnes:

    Code :
    CREATE TABLE abc(a text,b text, c text);
    On met du contenu dans 2 colonnes et un NULL au milieu.

    Code :
    INSERT INTO abc VALUES('toto',NULL,'titi');
    On sort le contenu avec COPY en mode CSV:

    Code :
    copy  abc TO stdout WITH delimiter ';' csv;
    Résultat:

    toto;;titi
    Il n'y a aucun guillemet.

    Si tu vois des guillemets de ton côté, montre ton jeu d'essai et ta requête pour reproduire le problème.

  7. #7
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 736
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 736
    Points : 14 935
    Points
    14 935

    Par défaut

    Il y a peut-être confusion entre les nulls et les vides :
    Code :
    1
    2
    3
    copy (SELECT 'abc','',NULL,'efg') TO stdout WITH delimiter ';' csv;
     
    abc;"";;efg

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
  •