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

#1 04/12/2014 14:46:36

XPBT
Membre

COPY / pb de chemin

Bonjour,
encore une question débutant:
je me sers de la fonction COPY avec l'instruction suivante : COPY (SELECT x FROM y) TO 'C:\tmp\transfert_data'  (DELIMITER ',');
Ça marche très bien lorsque je me connecte à une base en local; par contre, ça ne marche plus du tout lorsque je me connecte à une base distante, avec le message d'erreur "un chemin relatif n'est pas autorisé à utiliser l'instruction copy".  Dois-je écrire différemment le chemin de mon fichier?
Ou alors est-ce à dire que COPY ne permet pas de copier les données d'une base distante en local ? Comment puis-je m'y prendre dans ce cas pour récupérer les données d'une table d'une base distante et les réinjecter dans une table d'une base en local?
Merci d'avance pour vos réponses!

Hors ligne

#2 04/12/2014 15:03:15

gleu
Administrateur

Re : COPY / pb de chemin

Le fichier que vous indiquez à la commande COPY sera un fichier sur le serveur PostgreSQL, vu que la requête est exécutée sur le serveur.

Si vous voulez que ça crée un fichier en local, il vous faut un outil pour ça. Par exemple, l'outil psql avec sa méta commande \copy.


Guillaume.

Hors ligne

#3 04/12/2014 15:23:31

XPBT
Membre

Re : COPY / pb de chemin

C'est bien ce que je pensais. Pouvez-vous préciser comment utiliser cette "métacommande"?
Merci beaucoup.

Hors ligne

#4 04/12/2014 15:34:22

XPBT
Membre

Re : COPY / pb de chemin

Et si je fais COPY TO STDOUT ça n'est pas sensé copier les données vers mon application cliente?

Hors ligne

#5 04/12/2014 16:35:56

gleu
Administrateur

Re : COPY / pb de chemin

C'est bien ce que je pensais. Pouvez-vous préciser comment utiliser cette "métacommande"?

http://docs.postgresql.fr/9.3/app-psql. … mands-copy

Et si je fais COPY TO STDOUT ça n'est pas sensé copier les données vers mon application cliente?

Tout dépend de votre application cliente. C'est en effet ce que fait psql, quand on utilise le \copy. Quant aux autres applications, faut voir...


Guillaume.

Hors ligne

#6 04/12/2014 17:16:58

XPBT
Membre

Re : COPY / pb de chemin

Effectivement \copy me crée bien un fichier en local. Par contre, lorsque je veux réimporter ce fichier dans une table en local (même structure que la table distante d'origine) avec "COPY FROM", un message d'erreur me dit que certains champs ne sont pas renseignés. Bizarre non?

Tout dépend de votre application cliente. C'est en effet ce que fait psql, quand on utilise le \copy. Quant aux autres applications, faut voir...

J'utilise pgAdmin. Si je fais "COPY TO STDOUT" puis "COPY FROM STDIN" n'est-ce pas sensé marcher?

Merci beaucoup pour votre aide.

Hors ligne

#7 04/12/2014 18:30:08

gleu
Administrateur

Re : COPY / pb de chemin

Effectivement \copy me crée bien un fichier en local. Par contre, lorsque je veux réimporter ce fichier dans une table en local (même structure que la table distante d'origine) avec "COPY FROM", un message d'erreur me dit que certains champs ne sont pas renseignés. Bizarre non?

Oui. Cependant, il y a plus de chances que le problème ne vienne pas de PostgreSQL. Difficile d'être plus précis que ça sans (beaucoup) plus d'informations.

J'utilise pgAdmin. Si je fais "COPY TO STDOUT" puis "COPY FROM STDIN" n'est-ce pas sensé marcher?

Non. C'est d'ailleurs pour cela qu'il est impossible de recharger une sauvegarde SQL avec l'éditeur de requêtes de pgAdmin. C'est aussi pour cela que j'ai codé l'outil d'import de données (http://blog.guillaume.lelarge.info/inde … or-pgAdmin), qui passe en effet par le protocole COPY.


Guillaume.

Hors ligne

Pied de page des forums