How do you print the result of a PostgreSQL query in CSV or TSV format from the command line?
If you are using PostgreSQL 8.2 or newer, use this for CSV:
psql -c "COPY (<select query>) TO STDOUT WITH CSV"
and this of TSV, with proper NULLs:
psql -c "COPY (<select query>) TO STDOUT WITH NULL AS ''"
The CSV form will properly quote any fields that contain the double-quote character. See the PostgreSQL documentation of your specific version for more details and options for COPY.
Starting from Bohemian's answer, I found these flags useful:
psql my_database -U myuser -A -F , -X -t -f /path/to/query.sql -o /path/to/output.csv
- Unaligned output mode: -A
- Use comma as field delimiter: -F ,
- Do not read psqlrc: -X
- Tuples only (no header/footer): -t
- File containing SQL query: -f
- Output file: -o
EDITED: Using -F
Use commas via -F
and use "unaligned table output mode" -A
:
psql my_database -U myuser -A -F , -c "select * from mytable"