Respuestas:
De la ayuda de psql ( \?
):
\ o [FILE] envía todos los resultados de la consulta al archivo o | pipe
La secuencia de comandos se verá así:
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
db=>\q
\o
nuevamente lo apaga.
\?
no va al archivo. :(
\o queries-output.txt
redirige todos los comandos subsiguientes o / p al archivo nombrado queries-output.txt
y al escribir \o
(en el indicador psql nuevamente) revierte este comportamiento de redirección.
El \o
comando psql ya fue descrito por jhwist.
Un enfoque alternativo es usar el COPY TO
comando para escribir directamente en un archivo en el servidor. Esto tiene la ventaja de que está volcado en un formato fácil de analizar de su elección, en lugar del formato tabulado de psql. También es muy fácil importar a otra tabla / base de datos usando COPY FROM
.
¡NÓTESE BIEN! Esto requiere privilegios de superusuario y escribirá en un archivo en el servidor .
Ejemplo: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
Crea un archivo CSV con ';' como el separador de campo.
Como siempre, consulte la documentación para más detalles.
\copy
que es un comando postgres puede funcionar para cualquier usuario. No sé si funciona para \ dt o no, pero la sintaxis general se reproduce desde el siguiente enlace Sintaxis de copia SQL de Postgres
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
Lo anterior guardará el resultado de la consulta de selección en el nombre de archivo proporcionado como un archivo csv
EDITAR:
Para mi servidor psql, el siguiente comando funciona, esta es una versión anterior v8.5
copy (select * from table1) to 'full_path_filename' csv header;
Si tienes el siguiente error
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.
puedes ejecutarlo de esta manera:
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
Utilice la consulta a continuación para almacenar el resultado en el archivo csv
\ copy (su consulta) al encabezado csv de 'ruta de archivo';
Ejemplo
\ copy (seleccione nombre, orden de fecha de orden de compra) al encabezado cvs '/home/ankit/Desktop/result.csv';
Espero que esto te ayude.
Supongo que existe algún comando interno de psql para esto, pero también puede ejecutar el script
comando desde el paquete util-linux-ng :
DESCRIPCIÓN Script crea un mecanografiado de todo lo impreso en su terminal.
Este enfoque funcionará con cualquier comando psql desde el más simple hasta el más complejo sin requerir ningún cambio o ajuste al comando original.
NOTA: para servidores Linux.
MODELO
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
EJEMPLO
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
MODELO
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
EJEMPLO
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
¡Hecho! ¡Gracias! = D
Enfoque para el acoplador
a través del comando psql
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
o consulta del archivo sql
docker exec -i %containerid% psql -U %user% < file.sql > data.txt