我正在使用PostgreSql
数据库。我想从数据库中选择一些数据并将其复制到 csv 文件中。这有效:
\COPY (SELECT * from table) TO '/csv_dir/csv_file.csv';
我的问题是它只在整个命令只在一行中才有效。如何在多行中编写COPY命令?这个sql是我想放在更多行中的。
答案 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
不带参数结束它。