Réponses:
De l'aide de psql ( \?
):
\ o [FILE] envoie tous les résultats de la requête au fichier ou au | 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
\o
nouveau le désactive.
\?
ne va pas dans le fichier. :(
\o queries-output.txt
redirige toutes les commandes suivantes o / p vers le fichier nommé queries-output.txt
et la frappe \o
(à l' invite psql à nouveau) annule ce comportement de redirection.
La \o
commande psql a déjà été décrite par jhwist.
Une autre approche consiste à utiliser la COPY TO
commande pour écrire directement dans un fichier sur le serveur. Cela a l'avantage d'être sauvegardé 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 vers une autre table / base de données en utilisant COPY FROM
.
NB! Cela nécessite des privilèges de superutilisateur 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, consultez 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 de sélection dans le nom de fichier fourni en tant que fichier csv
ÉDITER:
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;
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
cette commande est utilisée pour stocker la table entière en tant que csv
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
Utilisez la requête ci-dessous pour stocker le résultat dans un fichier csv
\ copier (votre requête) dans l'en-tête csv du 'chemin du fichier';
Exemple
\ copy (sélectionnez le nom, date_order de Purchase_order) dans l'en-tête cvs «/home/ankit/Desktop/result.csv»;
J'espère que cela vous aidera.
Je suppose qu'il existe une commande psql interne pour cela, mais vous pouvez également exécuter la script
commande à partir du package util-linux-ng :
DESCRIPTION Le script crée un script de tout ce qui est imprimé sur votre terminal.
Cette approche fonctionnera avec n'importe quelle commande psql, de la plus simple à la plus complexe, sans nécessiter aucune modification ou ajustement de la commande d'origine.
REMARQUE: pour les serveurs Linux.
MODÈLE
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
EXEMPLE
read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
curid INT := 0;
vdata BYTEA;
badid VARCHAR;
loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
begin
select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
into loc
from public.some_base where some_field = badid;
SELECT file||' '
INTO vdata
FROM public.some_base where some_field = badid;
exception
when others then
raise notice 'Block/PageNumber - % ',loc;
raise notice 'Corrupted id - % ', badid;
--return;
end;
end loop;
end;
$f$;
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
MODÈLE
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
EXEMPLE
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
Terminé! Merci! = D
Approche pour docker
via la commande psql
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
ou requête à partir du fichier sql
docker exec -i %containerid% psql -U %user% < file.sql > data.txt