I'm having problem exporting my PostgreSQL output from a shell to a csv file.
My SQL script is called script.sql
.
I typed the following command in my shell:
psql congress -af script.sql &> filename.csv
But when I opened the filename.csv
file, values of all the columns are squeezed in one column in the Excel csv (see the attached screenshot).
Then I tried another way. I edited my script.sql
to be:
Copy (Select * From ...) To '/tmp/filename.csv' With CSV;
Then I typed the following command in the shell within the database dbname
.
\i script.sql
The output is:
COPY 162
Well, my output query has 162 rows.
So the 162 rows of my output table have been copied in the shell. How can I paste or move them to a csv file?
Or, if I'm going to use the filename.csv (screenshot is attached), how can I fix the format of that csv/Excel file?
Modern syntax:
COPY (SELECT * FROM ...) TO '/tmp/filename.csv' (format CSV);
So the 162 rows of my output table have been copied in the shell. How can I paste or move them to a csv file?
The result is the CSV file. Open it with any spreadsheet program using matching delimiters. Per documentation:
The default is a tab character in text format, a comma in CSV format
Like Patrick commented, you can use the corresponding psql meta command \copy
in a similar fashion. It writes (and reads) files local to the client and does not require superuser privileges.
More explanation in these related answers: