psql-guardar los resultados del comando en un archivo
Estoy usando psql \dt
para listar todas las tablas en una base de datos y necesito guardar los resultados.
¿Cuál es la sintaxis para exportar los resultados de un comando psql a un archivo?
6 answers
De la ayuda de psql (\?
):
\o [FILE] enviar todos los resultados de la consulta a file or / 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
[wist@scifres ~]$
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-16 21:03:15
El comando psql \o
ya fue descrito por jhwist.
Un enfoque alternativo es usar el comando COPY TO
para escribir directamente en un archivo en el servidor. Esto tiene la ventaja de que se descarga 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
.
NB! 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 separador de campos.
Como siempre, vea la documentación para más detalles
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-03 07:25:12
\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 Postgres SQL copy syntax
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
Lo anterior guardará la salida de la consulta select en el nombre de archivo proporcionado como un archivo csv
EDITAR:
Para mi servidor psql funciona el siguiente comando esta es una versión anterior v8.5
copy (select * from table1) to 'full_path_filename' csv header;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-08 16:18:30
Asumo que existe algún comando interno de psql para esto, pero también podría ejecutar el comando script
desde util-linux-ng paquete:
DESCRIPCIÓN Script hace un typescript de todo lo impreso en su terminal.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-16 20:55:25
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 11:27:13
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
este comando se utiliza para almacenar toda la tabla como csv
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-12 07:40:13