158

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

psql db -f sql.sql

来自bash或在cron脚本中。

它一直试图用moreor对输出进行分页less

如何禁用结果分页psql

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

4

7 回答 7

266

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

\pset pager off

要记住此设置,请将其添加到您的~/.psqlrc中,例如:echo \\pset pager off >> ~/.psqlrc

请参阅psql 手册

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

要完全禁止查询输出,\o /dev/null请在您的psql脚本中使用。

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


要产生结果并丢弃它们,您可以重定向stdout/dev/null

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

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

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

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

于 2012-06-25T04:19:07.490 回答
130

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

psql -P pager=off <other params>

关闭分页的东西,而不抑制输出。

于 2013-03-25T17:49:08.290 回答
14

这是另一种选择。它确实具有您不必记住 psql 选项名称等的优点。

psql ... | cat
于 2017-06-15T17:06:45.840 回答
12

作为shell的 bash有 2 个可以重定向输出数据的:stdout 和 stderr,因为这个输出需要重定向到某个地方,linux 有一个特定的“丢弃所有”节点可以通过/dev/null访问。你发送到那里的所有东西都会消失在虚空中。

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

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

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

假设我们想抑制标准输出(重定向到 /dev/null):

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

如您所见,这是默认的标准输出,如果您想使用要编写的流号,则未使用流号

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

于 2012-06-24T23:24:11.087 回答
9
psql -U user -P pager=off -d database -c 'SQL';
于 2018-11-30T13:53:31.043 回答
5
psql db -f sql.sql > /dev/null
于 2012-06-24T18:42:14.397 回答
0

此语法在 SSH 会话中对我有用:

psql db user --command "select * from table007" -A -P pager
于 2021-11-22T08:55:24.053 回答