Saving psql output to csv file
Asked Answered
O

1

8

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 ','
Ossuary answered 26/5, 2015 at 4:57 Comment(0)
G
12

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

Geum answered 26/5, 2015 at 5:20 Comment(4)
It works. This is a little nit-picky, but how do I get rid of 2 extra lines: "SELECT <random number>" at the top and "(rows <number of rows>)" at the bottom?Ossuary
If you want only tuples, without other rows at bottom and at the top, use the option -t: psql -U username -d dbname -f /path/to/query -o /path/to/output/file -F ',' -A -t.Geum
I tried that. I still saw "SELECT<random number">, though the row count at the bottom disappeared.Ossuary
This comes from the query. Post in your question the content of the file with the sql code.Geum

© 2022 - 2024 — McMap. All rights reserved.