sirve - ¿Cómo se imprime el resultado de una consulta PostgreSQL en formato CSV o TSV desde la línea de comandos?
postgresql version (6)
A partir de la respuesta de Bohemian, encontré estas banderas útiles:
psql my_database -U myuser -A -F , -X -t -f /path/to/query.sql -o /path/to/output.csv
- Modo de salida desalineado: -A
- Use la coma como delimitador de campo: -F,
- No lea psqlrc: -X
- Tuplas solamente (sin encabezado / pie de página): -t
- Archivo que contiene consulta SQL: -f
- Archivo de salida: -o
Me gustaría ejecutar una consulta desde el shell (no en el cliente psql interactivo) y hacer que imprima la representación CSV o TSV de la salida en STDOUT. ¿Cómo se hace eso con psql
o una de las herramientas de línea de comandos de PostgreSQL?
EDITADO: Usando -F
Use comas vía -F
y use "modo de salida de tabla no alineado" -A
:
psql my_database -U myuser -A -F , -c "select * from mytable"
Para especificar un tsv use el delimitador ''/ t''
psql my_database -U myuser -F''/t'' --no-align -f mysqlfile.sql -o outputfile.tsv
Para especificar un csv use el delimitador '',''
psql my_database -U myuser -F'','' --no-align -f mysqlfile.sql -o outputfile.csv
Puede especificar el separador de campo con el parámetro de línea de comando -F a psql
Si está utilizando PostgreSQL 8.2 o posterior, use esto para CSV:
psql -c "COPY (<select query>) TO STDOUT WITH CSV"
y esto de TSV, con NULL apropiados:
psql -c "COPY (<select query>) TO STDOUT WITH NULL AS ''''"
El formulario CSV citará correctamente cualquier campo que contenga el carácter de comillas dobles. Consulte la documentación de PostgreSQL de su versión específica para obtener más información y opciones sobre COPY.
También es posible el comando de copy que le permite especificar encabezado, delimitadores y opciones de cotización
psql my_database -U my_user -c "copy (select a.id,b.id from my_table_a as a inner join my_table_b as b on b.id = a.id) to STDOUT"