PostgreSQL的COPY命令 - 如何在多行中编写查询

5

我正在使用PostgreSql数据库。我想从数据库中选择一些数据并将其复制到一个csv文件中。以下是实现方法:

\COPY (SELECT * from table) TO '/csv_dir/csv_file.csv';

我的问题是只有在整个命令都在一行时才能按预期工作。我该如何将COPY命令写成多行?以下是我想要分成多行的SQL代码。


看起来你正在从psql控制台运行这个查询。使用PgAgent客户端来完成它。 - Ilesh Patel
我更喜欢这个答案:https://dev59.com/IVgQ5IYBdhLWcg3wqFyl - giorgio
1个回答

3
作为 psql 的内部命令,像其他以反斜杠开头的命令一样,\copy 必须放在一行上。
我猜你的目的是粘贴一个带有换行符的长查询,而无需编辑它。
你可以使用 COPY 替代 \COPY,将其输出重定向到 STDOUT,并将此 stdout 重定向到文件。例如:
$ psql -At -d test <<EOQ >outfile
COPY
 (select 1,2
  union
  select 3,4)
TO STDOUT;
EOQ

结果:

$ cat outfile
1   2
3   4

如果您已经在psql会话中,并且这个COPY命令必须存在于其他命令中,也可以通过以下序列实现:

test=> \t
只显示元组。
test=> \o outfile
test=> copy
test->  (select 1,2
test(> union
test(> select 3,4)
test-> to stdout;
test=> \o
test=> \t
关闭只显示元组选项。

\ o outfile 开始将输出捕获到文件中,\ o 无参数结束它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接