Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/12/2012, 13h43   #1
zoharcryss
Invité régulier
 
Inscription : 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 !!!
zoharcryss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2012, 19h43   #2
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Où ça un délimiteur?

Code :
 copy (SELECT 'abc',NULL,NULL,'efg') TO stdout WITH delimiter ';' csv;
Résultat:
Citation:
abc;;;efg
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 13h53   #3
zoharcryss
Invité régulier
 
Inscription : juillet 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 24
Points : 6
Points : 6
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.
zoharcryss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2012, 15h37   #4
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 14h50   #5
zoharcryss
Invité régulier
 
Inscription : juillet 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 24
Points : 6
Points : 6
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
zoharcryss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 15h52   #6
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
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:

Citation:
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 11h32   #7
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Î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 278
Points : 13 551
Points : 13 551
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h02.


 
 
 
 
Partenaires

Hébergement Web