【问题标题】:PostgreSQL query/error logging for .sql scripts.sql 脚本的 PostgreSQL 查询/错误日志记录
【发布时间】:2012-07-12 10:08:23
【问题描述】:

问题来了:我需要知道如何从已执行的 .sql 脚本中获取所有 PostgreSQL 输出以记录到文件中,包括错误和查询结果。

我已经用 \o 和 \o 开始和结束标记包围了我的脚本,但这只会记录查询的结果,这并不能告诉我什么成功和失败了。我曾尝试使用 Unix 工具将调用结果传递给 PostgreSQL,如下所示:

    $~: psql < filename.sql | tee &> filename.log

...没有成功。在这种情况下,Filename.log 最终完全为空。

我不想激活通用日志记录,因为我只关心我编写的脚本的成功/失败并记录下来以备将来参考。

在 Oracle 中,我使用 SPOOL,在 MySQL 中我使用 TEE。这两种方法都足以满足我的需求,但 \o 没有此功能,激活日志记录也没有,因为此日志记录到单个文件,我希望根据导致这些日志的文件分离我的日志。

任何帮助将不胜感激。

编辑:我使用的版本是 9.1

编辑:我遇到的问题是使用 -f 和使用

【问题讨论】:

    标签: sql postgresql logging tee spool


    【解决方案1】:

    这也有效 - 为“详细日志记录”使用 -a -b 和 -e 选项:

    psql -f scriptname.sql -a -b -e &> logname.text
    

    psql --help 显示:

    Input and output options:
      -a, --echo-all           echo all input from script
      -b, --echo-errors        echo failed commands
      -e, --echo-queries       echo commands sent to server
    

    【讨论】:

      【解决方案2】:

      我在命令行上使用了错误的重定向语法。虽然在我看来这不是一个理想的解决方案(我必须记住修改我曾经运行的任何命令以将输出重定向到文件),但它确实有效,这就是我所关心的。

      要将 stdout 和 stderr 重定向到一个文件以仅记录一个 .sql 文件的结果,包括错误和查询,可以执行以下操作:

      psql -f scriptname.sql &> logname.txt
      

      这是细分: -f(正如 Frank Heikens 的回答中提到的)是一个比 是一个 Linux 命令行技巧,它将 stdout 和 stderr 都放入后面的文件中。要将日志限制为仅错误(仅 sdterr 输出),只需使用 2> 而不是 &>。不需要管道,因为两条流都流向同一个地方。

      但是,您会注意到,上述命令会获取命令的所有输出并将其放入文件中,因此您在命令行中看不到任何输出。这对于调试 .sql 脚本并不理想,因此可以使用以下命令:

      psql -f scriptname.sql 2>&1 | tee logname.txt
      

      这里的故障是 2>&1 是 &> 的长形式,但是在使用管道时,2>&1 避免 BASH 将语法解释为错误(不要问我为什么)。 tee 只是允许输出到控制台和给定文件。上述所有命令中的文件名都可以是完整路径,并且可以包括 ~(用于主目录),以及 Linux 可以解释为有效文件名和/或路径的任何其他内容。

      不过,这个解决方案并不理想,因为它在我需要记录的 .sql 脚本之外。但是,这种方法确实有效。我认为 PostgreSQL 在 Linux 上的历史部分归咎于依赖命令行工具来完成这类事情。

      【讨论】:

      • 谢谢!这正是我一直在寻找的答案以及与之相关的解释。再次感谢!
      【解决方案3】:

      使用 -f(和其他设置)输入 psql

      【讨论】:

      • 虽然这是一个好习惯(它比
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多