リモート の postgresql につないで、
ローカル ファイルシステムにダンプする場合、
COPY コマンドの先頭に \
をつけて実行する必要がある。
psql> \COPY (SELECT * FROM foos WHERE id = 1) TO '/tmp/foos.dump';
\
なしだと以下のようなエラーが出る。
psql> COPY (SELECT * FROM foos WHERE id = 1) TO '/tmp/foos.dump';
ERROR: could not open file "/tmp/foos.dump" for writing: No such file or directory
参考:
postgresql の copy コマンド使用 | 開発メモ書き
PostgreSQL の COPY コマンドを使いこなす|Everything you do is practice
で、 COPY sql TO file
したものを、
COPY "sample_table" FROM stdin;
〜 \.
で囲むと、
それをそのまま psql に食わせることができるようになる。