J'utilise le \dt
de psql pour répertorier toutes les tables d'une base de données et je dois sauvegarder les résultats.
Quelle est la syntaxe pour exporter les résultats d'une commande psql dans un fichier?
De l'aide de psql (\?
):
\ o [FILE] envoie tous les résultats de la requête au fichier ou au canal
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 ~]$
La commande psql \o
était déjà décrite par jhwist.
Une autre approche consiste à utiliser la commande COPY TO
pour écrire directement dans un fichier sur le serveur. Cela présente l’avantage de l’être dans un format facile à analyser de votre choix, plutôt que dans 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 super-utilisateur et écrit 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
\copy
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 Syntaxe de copie SQL Postgres
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
Ce qui précède enregistrera la sortie de la requête sélectionnée dans le nom de fichier fourni en tant que fichier csv.
MODIFIER:
Pour mon serveur psql, la commande suivante fonctionne ceci est une version plus ancienne v8.5
copy (select * from table1) to 'full_path_filename' csv header;
Si vous obtenez 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
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
cette commande est utilisée pour stocker la table entière en tant que csv
Je suppose qu’il existe une commande psql interne pour cela, mais vous pouvez aussi exécuter la commande script
depuis util-linux-ng package:
LA DESCRIPTION Script crée un TypeScript de tout ce qui est imprimé sur votre terminal.