You could use the meta command \copy
in psql (which encapsulates SQL COPY
) on the command line, send it to stdout
and and redirect output to be appended to a file - with >>
instead of >
:
psql -c '\copy (SELECT 1, 2) to stdout' >> /path/to/file_to_append_to.csv
(You probably need more connection parameters.)
You can use SQL COPY
as well:
psql -c 'COPY (SELECT 1, 2) TO STDOUT' >> /path/to/file_to_append_to.csv
But it's often more convenient to use \copy
instead because (quoting the manual):
file accessibility and access rights depend on the client rather than
the server when \copy
is used.
Or, like Abelisto commented, from inside psql or any other client - if the program cat
is available (basically on all *nix OS):
COPY (SELECT 1, 2) TO PROGRAM 'cat >> /path/to/file_to_append_to.csv'
Or, still from inside psql, on any system, you can set the current directory and an output file with:
\cd /path/to/
\o file_to_append_to.csv
The file gets created (only) if it does not exist yet.
Then you can also SQL COPY
(or still \copy
as well):
COPY (SELECT 1, 2) TO STDOUT;
The output is appended to the file.