我想从shell(不在交互式psql客户端)执行查询,并将输出的CSV或TSV表示打印到STDOUT。你是如何使用psql
或其中一个PostgreSQL命令行工具做到的?
如果您使用的是PostgreSQL 8.2或更高版本,请将其用于CSV:
psql -c "COPY (<select query>) TO STDOUT WITH CSV"
这个TSV,有正确的NULL:
psql -c "COPY (<select query>) TO STDOUT WITH NULL AS ''"
CSV表单将正确引用包含双引号字符的任何字段。有关COPY的更多详细信息和选项,请参阅特定版本的PostgreSQL文档。
从波西米亚的答案开始,我发现这些标志很有用:
psql my_database -U myuser -A -F , -X -t -f /path/to/query.sql -o /path/to/output.csv
编辑:使用-F
通过-F
使用逗号并使用“未对齐的表输出模式”-A
:
psql my_database -U myuser -A -F , -c "select * from mytable"
要指定tsv,请使用分隔符'\ t'
psql my_database -U myuser -F'\t' --no-align -f mysqlfile.sql -o outputfile.tsv
要指定csv,请使用分隔符','
psql my_database -U myuser -F',' --no-align -f mysqlfile.sql -o outputfile.csv
也可以使用copy命令,它允许您指定标题,分隔符和引用选项
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"
您可以使用-f命令行参数为psql指定字段分隔符