Search code examples
sqlpostgresqlcsvpsqlpostgresql-copy

Saving psql output to csv file


I have a query written in a file located at /path/to/query. How can I save the output result to a csv file, without using COPY in the query? I tried the following command, but the output file's fields are separated by " | ".

psql -U username -d dbname -f /path/to/query -o /path/to/output/file -F ','

Solution

  • It is not explained in the documentation, but the -F option requires the -A option (unaligned table output) to work:

    psql -U username -d dbname -f /path/to/query -o /path/to/output/file -F ',' -A
    

    If you don't wish the headers in your csv, this means, without extra rows at the top and at the bottom, use the -t option too.

    psql -U username -d dbname -f /path/to/query -o /path/to/output/file -F ',' -A -t
    

    From the help:

    -A, --no-align unaligned table output mode
    -F, --field-separator=STRING set field separator (default: "|")
    -t, --tuples-only print rows only