psql - enregistrer les résultats de la commande vers un fichier
Je suis en utilisant psql est \dt
à la liste de toutes les tables dans une base de données et j'ai besoin d'enregistrer les résultats.
Quelle est la syntaxe pour exporter les résultats d'une psql commande vers un fichier?
- Voir aussi stackoverflow.com/questions/3939329/....
Vous devez vous connecter pour publier un commentaire.
De psql d'aide (
\?
):La séquence de commandes ressemblera à ceci:
\o
de nouveau éteint.\?
de ne pas aller au fichier. 🙁\o queries-output.txt
redirige toutes les commandes de la s/p de fichier nomméqueries-output.txt
et en tapant\o
(sur psql invite de nouveau) reprend cette redirection comportement.La psql
\o
commande a déjà été décrit par jhwist.Une approche alternative est d'utiliser le
COPY TO
commande pour écrire directement dans un fichier sur le serveur. Ceci a l'avantage que c'est l'objet de dumping dans un facile à analyser format de votre choix -- plutôt que de psql est sous forme de tableaux. Il est aussi très facile à importer dans une autre table/base de données à l'aide deCOPY FROM
.NB! Cela nécessite des privilèges de superutilisateur et écrire dans un fichier sur le serveur.
Exemple:
COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
Crée un fichier CSV avec des"; " comme séparateur de champ.
Comme toujours, voir la documentation pour plus de détails
\dt
\copy
qui est une postgres commande peut travailler pour n'importe quel utilisateur. Ne sais pas si cela fonctionne pour \dt ou pas, mais la syntaxe générale est reproduit à partir du lien suivant Postgres SQL copie de la syntaxePermettra d'enregistrer le résultat de la requête select dans le nom de fichier fourni sous forme de fichier csv
EDIT:
Pour mon psql serveur la commande suivante fonctionne ceci est une ancienne version v8.5
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
cette commande est utilisée pour stocker l'ensemble de la table au format csv
Si vous avez l'erreur suivante
ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
;
ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
vous pouvez l'exécuter de cette façon:
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
Je suppose qu'il existe une certaine interne de la commande psql pour cela, mais vous pouvez également exécuter l'
script
commande à partir de util-linux-ng package: