我正在使用 PostgreSql
数据库。我想从数据库中选择一些数据并将其复制到 csv 文件中。这有效:
\COPY (SELECT * from table) TO '/csv_dir/csv_file.csv';
我的问题是只有当整个命令仅在一行中时它才有效。如何在多行中编写 COPY 命令?这个 sql 是我想放在更多行中的。
最佳答案
作为 psql
的内部命令,与其他以反斜杠开头的命令一样,\copy
必须适合一行。
我认为您的目的是粘贴带有换行符的长查询而无需对其进行编辑。
您可以使用 COPY
而不是 \COPY
,将其输出重定向到 STDOUT,并将此 stdout
重定向到文件。例子:
$ psql -At -d test <<EOQ >outfile
COPY
(select 1,2
union
select 3,4)
TO STDOUT;
EOQ
结果:
$ cat 输出文件
1 2
3 4
如果您已经在 psql session 中并且此 COPY 必须存在于其他命令中,则也可以使用以下序列来实现:
测试=>\t
只显示元组。
测试=>\o 输出文件
测试=>复制
测试->(选择 1,2
测试(> 联合
测试(> 选择 3,4)
测试-> 到标准输出;
测试=>\o
测试=>\t
仅元组已关闭。
\o outfile
开始将输出捕获到文件中,没有参数的 \o
结束它。关于PostgreSQL COPY 命令 - 如何在多行中编写查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22989180/