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 ','
0

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

4 Comments

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?
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.
I tried that. I still saw "SELECT<random number">, though the row count at the bottom disappeared.
This comes from the query. Post in your question the content of the file with the sql code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.