psql-enregistrer les résultats de la commande dans un fichier

J'utilise dt de psql pour lister 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 commande psql dans un fichier?

185
demandé sur pstanton 2011-03-16 23:26:16

6 réponses

De l'aide de psql (\?):

\O [FILE] envoie tous les résultats de la requête dans file ou / pipe

La séquence de commandes ressemblera à ceci:

[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q

[wist@scifres ~]$ 
323
répondu jhwist 2011-03-16 21:03:15

La commande psql \o a déjà été décrite par jhwist.

Une autre approche consiste à utiliser la commande COPY TO pour écrire directement dans un fichier sur le serveur. Cela a l'avantage qu'il est déversé dans un format facile à analyser de votre choix-plutôt que le format tabulé de psql. Il est également très facile d'importer dans une autre table/base de données en utilisant COPY 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 '; ' comme séparateur de champ.

Comme toujours, voir la documentation pour plus de détails

69
répondu intgr 2016-10-03 07:25:12

\copy ce qui est une commande postgres peut fonctionner pour n'importe quel utilisateur. Je ne sais pas si cela fonctionne pour \dt ou non, mais la syntaxe générale est reproduite à partir du lien suivant Postgres SQL copy syntaxe

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

Ce qui précède enregistrera la sortie de la requête select dans le nom de fichier fourni en tant que fichier csv

Modifier:

Pour mon serveur psql, la commande suivante fonctionne Il s'agit d'une ancienne version v8.5

copy (select * from table1) to 'full_path_filename' csv header;
13
répondu Aakash Gupta 2018-10-08 16:18:30

Je suppose qu'il existe une commande psql interne pour cela, mais vous pouvez également exécuter la commande script à partir du paquetutil-linux-ng :

DESCRIPTION Script fait un typescript de tout ce qui est imprimé sur votre terminal.

1
répondu hlovdal 2011-03-16 20:55:25

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

1
répondu Daniil Mashkin 2018-02-12 11:27:13

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; cette commande est utilisée pour stocker la table entière au format csv

0
répondu Stephen 2017-10-12 07:40:13