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"

Tags:

Postgresql