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

时间:2014-04-10 13:15:34

标签: postgresql copy psql

我正在使用PostgreSql数据库。我想从数据库中选择一些数据并将其复制到 csv 文件中。这有效:

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

我的问题是它只在整个命令只在一行中才有效。如何在多行中编写COPY命令?这个sql是我想放在更多行中的。

1 个答案:

答案 0 :(得分:2)

作为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
Showing only tuples.
test=> \o outfile
test=> copy
test->  (select 1,2
test(> union
test(> select 3,4)
test-> to stdout;
test=> \o
test=> \t
Tuples only is off.

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