2011-03-16 10 views
161

Estoy usando psql's \dt para listar todas las tablas en una base de datos. Necesito guardar los resultados en un archivo.psql - guarde los resultados del comando en un archivo

Estoy seguro de haber hecho esto antes, pero no puedo recordar la sintaxis.

gracias.

+0

Véase también http://stackoverflow.com/questio ns/3939329/put-output-from-postgres-i-input-to-a-file. –

Respuesta

277

De la ayuda de psql (\?):

\ o [ARCHIVO] enviar todos los resultados de la consulta a un archivo o | tubería

La secuencia de comandos se verá así:

[[email protected] ~]$ psql db 
Welcome to psql 8.3.6, the PostgreSQL interactive terminal 

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

[[email protected] ~]$ 
+1

¿Llamo esto antes de \ dt, o en combinación? por favor incluye sintaxis gracias. – pstanton

+52

Tecleando '\ o' nuevamente lo apaga. –

+2

Lamentablemente, la salida de '\?' No va al archivo. :( – blitzen9872

1

Supongo que existe algún comando psql interno para esto, pero también puede ejecutar el comando script desde util-linux-ng paquete:

DESCRIPCIÓN El script hace un texto a máquina de todo lo impreso en su terminal.

65

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 de importar a otra tabla/base de datos usando COPY FROM.

¡NOTA! 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, see the documentation for details

+2

copiar a no funciona con '\ dt' – pstanton

+0

wow, un buen enfoque de hecho – helvete

10

\copy que es un comando postgres puede funcionar para cualquier usuario. No sabe si funciona para \ dt o no, pero sintaxis general se reproduce desde el siguiente enlace Postgres SQL copy syntax

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

Lo anterior va a salvar la salida 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; 
+0

Muy útil, gracias. Pero la 'copia' en '.. "Copiar a ..." no es necesario, de hecho, en las versiones recientes hace que falle el comando. – Tom

+0

Tom, creo que fue un error tipográfico. Edité la publicación con la que funciona en mi instalación pgsql 8.5ver –

0

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; este comando se utiliza para almacenar toda la tabla como csv

1

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.

se puede ejecutar de esta manera:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

Cuestiones relacionadas