关于postgresql:使用psql的副本进行多行查询

Use psql's copy for a multi-line query

这是从"将PostgreSQL的PL / pgSQL输出保存到CSV文件"的答案中的后续问题。

我需要使用psql的\copy命令编写客户端CSV文件。 一个班轮工作:

1
2
db=> \copy (SELECT 1 AS foo) TO 'bar.csv' csv header
COPY 1

但是,我有很长的查询,跨越几行。 我不需要显示查询,因为我似乎无法在没有解析错误的情况下延伸过去一行:

1
2
3
4
5
6
7
8
9
10
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。


我现在的工作解决方案是创建一个临时视图,可以通过多行声明,然后在\copy命令中从中选择,它可以轻松地放在一行上。

1
2
3
4
5
6
7
8
9
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