我正在使用 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/

10-15 20:42