PostgreSQL禁用更多输出


146

我在PostgreSQL服务器上运行脚本:

psql db -f sql.sql

bash或在cron脚本中。

它一直尝试使用more或分页输出less

如何在中禁用结果分页psql

我要做的就是更改数据,我不在乎任何输出。

Answers:


244

要禁用分页但保留输出,请使用:

\pset pager off

要记住此设置,请将其添加到〜/ .psqlrc中

请参见psql手册

在旧版的Pg上,这只是一个切换,因此 \pset pager

要完全禁止查询输出,请\o /dev/nullpsql脚本中使用。

要取消显示psql的信息输出,请在-qQUIET=1环境中运行它。


要产生结果并将其丢弃,可以使用以下方法重定向stdout/dev/null

psql db -f sql.sql >/dev/null

您可以使用以下命令重定向stdout和stderr:

psql db -f sql.sql >&/dev/null

但我不建议这样做,因为它会丢弃可能警告您某些错误的错误信息。您还会产生结果并将其丢弃,这效率很低;您最好不要只通过调整查询来首先生成它们。


这样可以阻止它使用寻呼机,但不会停止输出,不是吗?我猜您需要PAGER="/dev/null" psql db -P pager=always -f sql.sql使它始终终止输出。
Harald Brinkhof 2012年

112

我也在寻找这个,我在ServerFault 的类似问题中找到了解决方法:

psql -P pager=off <other params>

关闭分页功能,而不抑制输出。


4
这个答案比手册页中有关-P的内容要有用。谢谢!
通常

这正是我所需要的。谢谢:)
Pradip Das

13

这是另一个选择。它的优点是您不必记住psql选项名称等。

psql ... | cat

绝对的提示!+1
sjas

11

bash是一个外壳,有2个流,您可以重定向输出数据:stdout和stderr,因为此输出需要重定向到某个地方,所以linux有一个特定的“丢弃所有”节点,可以通过/ dev / null到达。您发送到那里的所有内容都将消失在空白中。

(shell也有一个输入流,但是由于您要求抑制输出,因此在这里我将忽略它)

这些流由数字表示:1表示标准输出,2表示标准错误。

因此,如果您只想重定向标准输出,则可以使用<and >运算符(基本上,它指向的位置就是数据流向的位置)

假设我们要禁止stdout(重定向到/ dev / null):

psql db -f sql.sql > /dev/null

如您所见,这是默认的stdout,如果要使用要编写的流号,则没有流号已被使用

psql db -f sql.sql 1> /dev/null

现在,如果您想抑制stderror(流编号2),则可以使用

psql db -f sql.sql 2> /dev/null

您也可以将一个流重定向到另一个流,例如将stderror重定向到stdout,如果要将所有输出保存在常规和错误的地方,这很有用。

psql db -f sql.sql 2>&1 > log.txt

请注意,您之间不能有空格 2>&1

最后,有时最有趣的是,您可以通过使用来抑制所有输出&>,因为当您希望它“完全安静”时

psql db -f sql.sql &> /dev/null


1
尽管此信息在原则上是合理的,但在此特定情况下根本不起作用,因为psql不会将信息性消息发送到stderr。它们与stdout上的数据混合在一起。
乔纳森·哈特利

突然我意识到您的意思是,通过抑制所有输出,OP可以使用最后的'&>'情况来停止寻呼机。如果您以任何方式修改答案,我都会删除我的不赞成意见。
乔纳森·哈特利


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.