管道 psql 错误输出到 grep

Pipe psql error output to grep

我是 运行 一个 psql 查询:

$ psql --file=foo.sql "BAR-DB"

其中 foo.sql 包含查询。 foo.sql 语法错误,因此输出是错误消息列表。我的计划是将输出通过管道传输到 grep,这样我就可以过滤特定的错误消息,但是

$ psql --file=foo.sql "BAR-DB" | grep PATTERN

似乎没有做任何事情。 psql 的文档显示了可选标志:

-o, --output=FILENAME    send query results to file (or |pipe)

但我不确定如何使用它将输出通过管道传递给 grep。正确的语法是什么?

您可以将 psql 的 stderr 重定向到 stdout,然后将其通过管道传输到 grep:

psql --file=foo.sql "BAR-DB" 2>&1 | grep -- PATTERN