PostgreSQL禁用更多输出

Chr*_*ris 137 postgresql

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

psql db -f sql.sql
Run Code Online (Sandbox Code Playgroud)

来自bash或在cron脚本中.

它一直试图用more或者对输出进行分页less.

如何禁用结果分页psql

我想做的就是改变数据,我不关心任何输出.

Cra*_*ger 232

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

\pset pager off
Run Code Online (Sandbox Code Playgroud)

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

请参阅psql手册.

在旧版本的Pg上,它只是一个切换,所以 \pset pager

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

要抑制psql信息输出,请在环境中运行-q或设置QUIET=1.


要产生结果并扔掉它们,您可以重定向stdout/dev/null:

psql db -f sql.sql >/dev/null
Run Code Online (Sandbox Code Playgroud)

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

psql db -f sql.sql >&/dev/null
Run Code Online (Sandbox Code Playgroud)

但我不建议这样做,因为它会丢弃可能会警告你某些事情不正确的错误信息.你也会产生结果并扔掉它们,这是低效的; 你最好不要通过调整查询来生成它们.

  • 不,使用\ o/dev/null (4认同)

Dav*_*ide 105

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

psql -P pager=off <other params>
Run Code Online (Sandbox Code Playgroud)

关闭分页事物,而不抑制输出.

  • 这个答案比手册中的-P更有帮助.谢谢! (3认同)

Har*_*hof 10

bash,作为一个shell,有两个流,你可以重定向输出数据:stdout和stderr,因为这个输出需要重定向到某个地方,linux有一个特定的'丢弃一切'节点可以通过/ dev/null到达.你寄到那里的一切都会消失在虚空之中.

(shell也有一个输入流,但我会忽略这个,因为你要求抑制输出)

这些流由数字表示:1表示stdout,2表示stderr.

因此,如果你想重定向stdout,你就可以使用<>运算符(基本上指向数据所在的位置)

假设我们要抑制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


FMc*_*FMc 10

这是另一种选择.它的优势在于您不必记住psql选项名称等.

psql ... | cat
Run Code Online (Sandbox Code Playgroud)


小智 7

psql -U user -P pager=off -d database -c 'SQL';
Run Code Online (Sandbox Code Playgroud)

  • 通常最好解释一个解决方案,而不是仅仅发布一些匿名代码行。您可以阅读[我如何写出一个好的答案](https://stackoverflow.com/help/how-to-answer),以及[完全基于代码的解释](https://meta.stackexchange.com) /questions/114762/explaining-entirely-%E2%80%8C%E2%80%8Bcode-based-answers) (3认同)

Mar*_*c B 6

psql db -f sql.sql > /dev/null
Run Code Online (Sandbox Code Playgroud)