【问题标题】:Postgres Psql to filePostgres Psql 到文件
【发布时间】:2020-10-13 22:48:52
【问题描述】:

我有一个 bash 脚本,它调用 PSQL,它执行一个查询,然后使用 WHILE 循环,我将输出打印到一个文件中。比如:

psql -U zrec -d zrec -t -c "SELECT .........;" \    | while read -a Record; do
  printf "${Record[0]},${Record[1]}\n"  >> /tmp/file.csv
done

该查询已发展为一个非常大的查询。另外,我现在需要将日期变量传递给查询。所以,我正在考虑采用这个硬编码查询,并将其放入 .sql 文件中,调用它,传递日期变量,然后将输出打印到文件中。

Oracle 通过 SPOOL 和 &1 等使这一切变得简单......

有没有办法:

  1. 调用 bash 脚本
  2. 让脚本调用 my_query.sql,并传递一个日期参数
  3. 将查询输出放入文件中

看起来应该很简单,但事实证明并非如此。

【问题讨论】:

    标签: postgresql csv psql


    【解决方案1】:

    如果你想生成一个csv 文件,不要使用假脱机或类似的东西,使用\copy。无需循环。

    类似:

    \copy (SELECT ....) to '/tmp/file.csv' with (format csv, header true)
    

    通常将超过几个单词的任何内容放入单独的 SQL 脚本中比使用 -c "..." 传递它更容易,这也会引发许多嵌套引用问题。

    因此,如果您将上述内容放入文件中,例如export.sql,你只需要:

    psql -U zrec -d zrec -f export.sql`
    

    【讨论】:

    • 如果该答案解决了您的问题,那么请accept它,以便您的问题被标记为已解决。
    • 其实我还有1个问题,如果我能把它放在这里:使用你的方法,如果查询需要一个参数,我如何将它传递给复制命令?
    猜你喜欢
    • 2022-01-23
    • 2019-02-21
    • 2018-10-24
    • 2014-10-04
    • 2016-07-31
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多