Estoy usando psql \dt
para enumerar 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?
postgresql
psql
pstanton
fuente
fuente
Respuestas:
De la ayuda de psql (
\?
):La secuencia de comandos se verá así:
fuente
\o
nuevamente lo apaga.\?
no va al archivo. :(\o queries-output.txt
redirige todos los comandos subsiguientes o / p al archivo nombradoqueries-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 usandoCOPY 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.
fuente
\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 PostgresLo 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
fuente
Use el parámetro o del comando pgsql.
fuente
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
este comando se usa para almacenar toda la tabla como csvfuente
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
fuente
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.
fuente
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 :fuente
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
EJEMPLO
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
fuente
Enfoque para el acoplador
a través del comando psql
o consulta del archivo sql
fuente