Vous n'êtes pas identifié(e).
Bonjour,
Je travaille sous windows et me connecte à ma base postgresql via ssh
Je souhaite copier une table dans un fichier csv sur mon poste local
j'utilise donc la commande ci-dessous prévue (\copy permet cela si j'ai bien compris la doc : remote to local):
\copy (SELECT * FROM maTable) TO 'D:/Users/chemin/export.sql' DELIMITER ',' CSV;
mais j'obtiens une erreur sur mon chemin alors même que celui-ci est bon : "Aucun fichier ou dossier de ce type"
d'avance merci pour votre aide
Hors ligne
Le "local" dans "remote to local" signifie où psql est lancé. psql est-il lancé sur votre poste windows ou depuis la session ssh? Dans le second cas l'erreur me parait tout à fait normale.
Julien.
https://rjuju.github.io/
Hors ligne
bonjour,
depuis la session ssh
dans ce cas, comment puis-je copier les données d'une table via ssh sur mon poste local ?
Hors ligne
2 possibilités:
- faire un \copy TO './monfichier' puis récupérer le fichier localement (scp ou autre)
- utiliser psql localement, en supposant que vous pouvez (et voulez) autoriser la connexion depuis votre poste
Julien.
https://rjuju.github.io/
Hors ligne
\copy (SELECT * FROM maTable) TO './export.sql' DELIMITER ',' CSV;
Permission non accordée
Hors ligne
Est-ce que que le compte Linux qui lance psql a bien le droit d'écrire dans le répertoire courant ? Si c'est le cas ça doit fonctionner pour avoir le fichier sur Linux.
Pierre
Hors ligne
je vais regarder
c'est le compte postgres par defaut
Hors ligne
Si vous avez de la place dans /tmp vous pouvez aussi essayer:
\copy (SELECT * FROM maTable) TO '/tmp/export.sql' DELIMITER ',' CSV;
Pierre
Hors ligne
Si vous avez de la place dans /tmp vous pouvez aussi essayer:
\copy (SELECT * FROM maTable) TO '/tmp/export.sql' DELIMITER ',' CSV;
C'est malheureusement une mauvaise idée depuis que systemd est passé par là. Le fichier sera probablement supprimé de manière aléatoire, ou d'autres restrictions peuvent s'appliquer.
Julien.
https://rjuju.github.io/
Hors ligne
Oui le fichier peut être supprimé selon les règles définies (pour CentOS 7) dans:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf
Cela ne doit pas donc être aléatoire (même s'il y a beaucoup de règles) et ne doit pas empêcher d'utiliser /tmp pour stocker un fichier temporaire avant de le transférer sur une autre machine.
Pierre
Hors ligne
Je ne suis pas d'accord, vous avez au minimum à vous méfier de PrivateTmp (https://www.freedesktop.org/software/sy … .exec.html). J'imagine que les nouvelles versions de systemd et de l'intégration dans les systèmes d'exploitation apporte rtégulièrement son lot de nouvelles façons d'empêcher l'utilisation de /tmp.
Julien.
https://rjuju.github.io/
Hors ligne
je reviens déterrer ce post car je n'ai toujours pas réussi
j'ai une base de données mabase et un utilisateur monutilisateur que j'ai "granté" sur cette base
je vais reprendre ce que je fais :
1. je me connecte via Putty au serveur distant
2. je lance psql : sudo -u postgres psql (j'ai essayé de me connecter avec monutilisateur mais j'obtiens le message d'erreur suivant : sudo : utilisateur inconnu : monutilisateur et sudo : impossible d'intialiser le greffon de règles)
3. je me connecte à ma base : \c mabase
4. je lance la commande \copy matable TO '/home/path/to/my/file/file.txt' et j'obtiens le message d'erreur suivant : '/home/path/to/my/file/file.txt' : Permission non accordée
d'avance merci pour votre aide
Hors ligne
4. je lance la commande \copy matable TO '/home/path/to/my/file/file.txt' et j'obtiens le message d'erreur suivant : '/home/path/to/my/file/file.txt' : Permission non accordée
A la place de '/home/path/to/my/file/file.txt' il faut mettre un chemin où l'utilisateur "postgres" de votre serveur a le droit d'écrire.
Généralement un utilisateur a au moins le droit d'écrire dans son répertoire personnel.
Pour savoir quel est le répertoire personnel de postgres, au lieu de faire sudo -u postgres psql, vous pouvez faire
sudo -u postgres -i
Ce donnera un shell interactif. Puis exécuter
pwd
pour savoir quel est le répertoire courant, ou bien
echo $HOME
qui devrait donner le même résultat.
Ensuite faire
psql
tout seul (sans sudo) et utiliser ce répertoire pour la destination de \copy.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
merci çà a marché mais je suis un peu perdu
j'ai le fichier dans /var/lib/postgresql/
comment je le transfert sur mon ordi en local ?
Hors ligne
Pour transférer le fichier vers un PC windows il faut utiliser un programme de transfert qui fonctionne avec le protocole SSH.
Il y en a pas mal, par exemple: WinSCP ou BitVise qui ont des interfaces graphiques, ou en ligne de commande pscp.exe ou psftp.exe (ceux-là sont téléchargeables sur le même site que putty)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
ah bon ?
d'après le site https://linuxize.com/post/how-to-use-sc … fer-files/
je devrais pouvoir faire
scp zebra@192.168.80.9:/var/lib/postgresql/crf_ran_export_20200717.txt C:\Users\jl3.PRT-063\Desktop
mais j'obtiens l'erreur :
ssh: Could not resolve hostname c: Temporary failure in name resolution
lost connection
si je fait scp zebra@192.168.80.9:/home/zebra/scripts/crf_ran_export_20200717.txt C:/Users/jl3.PRT-063/Desktop (slash '/' à la place d'antislash '\' dans le chemin) j'obtiens une erreur concernant les droits d'accès :
Permission denied, please try again.
Dernière modification par LECARROU (17/07/2020 14:51:17)
Hors ligne
Je pense que vous lancez ce scp sur le serveur, en tant que commande linux à l'intérieur de votre session putty, alors qu'il faut le lancer sur le PC Windows en tant que commande Windows.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
YES.... je suis stupide, j'avais fais la même l'autre jour... je me mélange trop les pinceaux...
Hors ligne