PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/09/2011 17:22:28

Gold.Strike
Membre

Export de données avec la commande COPY

Bonjour,

J'ai besoin de copier des données issues de plusieurs tables d'une BDD vers une autre.

Je souhaite utiliser la commande COPY car je dois copier seulement une partie de données correspondant à un critère, comme suggéré sur ce topic : http://forums.postgresql.fr/viewtopic.php?id=293

Je n'arrive pas à exécuter ma commande :

COPY 
(select * 
FROM exercices 
WHERE module_id = 2)
TO E'C:\\PCD\\Export\\test.csv';

car j'obtiens le message suivant :

ERREUR: n'a pas pu ouvrir le fichier « C:\PCD\Export\test.csv » en écriture : No such file or directory
État SQL :58P01

Auriez vous une idée?

Hors ligne

#2 08/09/2011 17:38:45

gleu
Administrateur

Re : Export de données avec la commande COPY

Le serveur PostgreSQL se trouve sur un serveur Windows ? si oui, le répertoire C:\PCD\Export existe-t-il ? si oui, l'utilisateur Windows postgres a-t-il le droit d'y créer des fichiers ? Et enfin, je ne pense pas qu'il faille utiliser les \ comme séparateur dans un chemin Windows avec la commande COPY. Il faudrait les remplacer par des slashs standards (/).


Guillaume.

Hors ligne

#3 08/09/2011 17:53:22

Gold.Strike
Membre

Re : Export de données avec la commande COPY

Quand je teste en mettant :

COPY 
(select * 
FROM exercices 
WHERE module_id = 2)
TO E'C://PCD//Export//test.csv';

Le message est différent :

ERREUR:  n'a pas pu ouvrir le fichier « C://PCD//Export//test.csv » en écriture : No such file or directory

********** Erreur **********

ERREUR: n'a pas pu ouvrir le fichier « C://PCD//Export//test.csv » en écriture : No such file or directory
État SQL :58P01

Je pense donc que la première syntaxe est correcte.
Sinon j'ai bien donné les droits à tous les utilsiateurs sur le répertoire : "'C:\PCD\Export\". C'est pour ça que ne comprends pas trop...

Mais j'ai testé la même commande sur mon serveur, qui lui ne contient pas de répertoire  "'C:\PCD\Export\", et le message est le même. Je ne pense donc pas que ce soit un problème de droits.

Dernière modification par Gold.Strike (08/09/2011 17:55:28)

Hors ligne

#4 08/09/2011 21:03:43

gleu
Administrateur

Re : Export de données avec la commande COPY

Si le serveur ne contient pas de répertoire C:\PCD\Export, vous avez votre réponse. La commande COPY ne peut pas lire le fichier ailleurs que sur le serveur vu qu'elle est exécutée par le serveur.


Guillaume.

Hors ligne

#5 09/09/2011 01:19:58

meles
Membre

Re : Export de données avec la commande COPY

Bonjour,
  dans ce cas la, pgadmin et "executer dans un fichier" pourrait être une bonne solution.

Cordialement

Hors ligne

#6 09/09/2011 08:41:05

gleu
Administrateur

Re : Export de données avec la commande COPY

Je ne vois pas en quoi pgAdmin améliorerait la situation. Cependant, \copy (si utilisé à partir de psql) sera plus utile que COPY.


Guillaume.

Hors ligne

#7 09/09/2011 09:31:30

Gold.Strike
Membre

Re : Export de données avec la commande COPY

gleu a écrit :

Si le serveur ne contient pas de répertoire C:\PCD\Export, vous avez votre réponse. La commande COPY ne peut pas lire le fichier ailleurs que sur le serveur vu qu'elle est exécutée par le serveur.

Merci Gleu. Effectivement après avoir créé le bon dossier sur le serveur la commande s'est exécutée correctement.
Je pensais qu'elle était exécutée directement pas PgAdmin, et que du coup elle pouvait être utilisée "n'importe ou"...

Hors ligne

#8 09/09/2011 14:36:18

gleu
Administrateur

Re : Export de données avec la commande COPY

Oui, c'est une erreur assez fréquente. La commande est exécutée sur le serveur, donc le fichier doit être accessible du serveur. Il faut juste le savoir smile


Guillaume.

Hors ligne

#9 09/09/2011 18:44:55

meles
Membre

Re : Export de données avec la commande COPY

gleu a écrit :

Je ne vois pas en quoi pgAdmin améliorerait la situation. Cependant, \copy (si utilisé à partir de psql) sera plus utile que COPY.

Peut etre parce que pgadmin permet de balancer le résulat d'une requête dans un fichier et que ce fichier peut etre sur le client à partir duquel on se connecte.

Mais, c'est vrai que \copy devrait suffire (comme d'habitude, j'utilise pgadmin).

Cordialement

Hors ligne

#10 09/09/2011 20:25:13

gleu
Administrateur

Re : Export de données avec la commande COPY

Ah oui pardon, c'est une copie vers le PC. Oui, dans ce cas, je prendrais l'éditeur de requêtes, j'exécuterais le SELECT et j'utiliserais le menu d'export. Bien vu.


Guillaume.

Hors ligne

Pied de page des forums