Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
Bonjour,
dans ce cas la, pgadmin et "executer dans un fichier" pourrait être une bonne solution.
Cordialement
Hors ligne
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
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
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
Guillaume.
Hors ligne
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
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
Pages : 1