web-dev-qa-db-ja.com

複数行のクエリにはpsqlの\ copyを使用します

これは this answer の「 PL/pgSQL出力をPostgreSQLからCSVファイルに保存する 」からのフォローアップの質問です。

Psqlの \copyコマンド を使用して、クライアント側のCSVファイルを作成する必要があります。ワンライナーが機能します:

db=> \copy (select 1 AS foo) to 'bar.csv' csv header
COPY 1

ただし、数行にわたる長いクエリがあります。クエリを表示する必要はありません。解析エラーなしでこの過去1行を拡張できないようです。

db=> \copy (
\copy: parse error at end of line
db=> \copy ( \\
\copy: parse error at end of line
db=> \copy ("
\copy: parse error at end of line
db=> \copy "(
\copy: parse error at end of line
db=> \copy \\
\copy: parse error at end of line

\copyを複数行にわたるクエリで使用できますか? Windowsでpsqlを使用しています。

27
Mike T

私が今持っている実用的な解決策は、 一時ビューを作成する です。これは複数行にわたって宣言でき、\copyコマンド。1行に快適に収まります。

db=> CREATE TEMP VIEW v1 AS
db->   SELECT i
db->   FROM generate_series(1, 2) AS i;
CREATE VIEW
db=> \cd /path/to/a/really/deep/directory/structure/on/client
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header
COPY 2
db=> DROP VIEW v1;
DROP VIEW
37
Mike T