Export remote Postgres table to CSV file on local machine
Both the approaches already suggested appear to be unnecessarily complicated.
Just use psql
's built-in \copy
command, which works just like server-side COPY
but does a copy over the wire protocol to the client and uses client paths.
Because it's a psql
backslash command you omit the trailing semicolon, eg:
\copy products TO '/tmp/products.csv' CSV DELIMITER ','
See the \copy
entry in the manual for the psql
command and the COPY
command documenation for more detail.
Just like COPY
you can use \copy
with a (SELECT ...)
query instead of a table name when copying data out (but not in).
A generally inferior alternative that can be useful in a few limited situations is to use:
psql -t -P format=unaligned -P fieldsep_zero=on -c 'SELECT * FROM tablename'
and use the -o
flag or shell output redirection to write the output to a file. You should almost always use \copy
in preference to this.
The Linux command is:
psql -h 127.0.0.1 -U username -o file.csv -c 'select id, name from clients;'