【问题标题】:psql - write a query and the query's output to a filepsql - 将查询和查询的输出写入文件
【发布时间】:2021-09-16 20:51:06
【问题描述】:

在 postgresql 9.3.1 中,当使用psql 命令交互式开发查询时,最终结果有时是将查询结果写入文件:

boron.production=> \o /tmp/output
boron.production=> select 1;
boron.production=> \o
boron.production=> \q
$ cat /tmp/output
?column? 
----------
        1
(1 row)

这很好用。但是我怎样才能让 查询本身 连同查询结果一起写入文件?

我尝试给 psql 提供--echo-queries 开关:

   -e, --echo-queries
       Copy all SQL commands sent to the server to standard output as well.
       This is equivalent to setting the variable ECHO to queries.

但这总是回显到标准输出,而不是我用 \o 命令提供的文件。

我也尝试过--echo-all 开关,但它似乎无法回显交互式输入。

使用命令编辑,我可以在前面加上\qecho 重复查询。这行得通,但很乏味。

有什么方法可以引导交互式 psql 会话将查询和查询输出写入文件?

【问题讨论】:

  • \o 将查询 result 输出到输出文件...我不知道该怎么做。您可以使用 \qecho... 将文本放入输出中,也可以使用重定向批量运行 SQL。然后 -e 将起作用。

标签: postgresql psql


【解决方案1】:

您可以尝试将标准输出直接从您的 shell 重定向到一个文件(Win 或 Linux 应该可以)

psql -U postgres -c "select 1 as result" -e nomedb >> hello.txt

这样做的缺点是不能让您以交互方式查看输出。如果这是一个问题,您可以在单独的终端中跟踪输出文件,或者,如果在 *nix 中,使用 tee 实用程序:

psql -U postgres -c "select 1 as result" -e nomedb | tee hello.txt

希望这会有所帮助!

卢卡

【讨论】:

  • 我刚刚意识到,加上tee,这很好地回答了我的问题,所以我冒昧地编辑了答案来展示如何使用tee;然后,授予过期的复选标记。谢谢你的回答!
【解决方案2】:

我知道这是一个老问题,但至少在 9.3 和当前版本中,这可以使用文档中显示的查询缓冲区元命令或 \?从 psql 控制台:https://www.postgresql.org/docs/9.3/static/app-psql.html

\w or \write filename
\w or \write |command

Outputs the current query buffer to the file filename or pipes it to the shell command command.

【讨论】:

  • 感谢您帮助解决这个老问题。 \w(又名\write)命令写入以前的命令,没有它们的输出(在 psql 9.4.8 中测试)。相反,需要的是将来的命令及其输出被写入。尽管如此,鉴于我们目前必须使用其他方式来实现我的目标,这是一个很好的了解命令。
【解决方案3】:

请尝试这种格式,因为我得到了相同的输出:

psql -h $host -p $port -q -U $user -d $Dbname -c "SELECT \"Employee-id\",\"Employee-name\" FROM Employee_table" >> Employee_Date.csv

我需要 CSV 文件中的输出。

【讨论】:

  • --csv 添加到您的 psql 参数中
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 2015-06-29
  • 2011-09-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多