PostgreSQL 禁用更多输出

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

psql db -f sql.sql

bash或在 cron脚本。

它不断尝试使用 moreless对输出进行分页。

如何在 psql中禁用结果分页?

我想做的只是改变数据,我不想要任何输出内容。

84722 次浏览
psql db -f sql.sql > /dev/null

Bash 是一个 Shell,它有2个 溪流,您可以重定向输出数据: stdout 和 stderr,因为这个输出需要重定向到某个地方,所以 Linux 有一个通过 /dev/null可以访问的特定的“丢弃一切”节点。你送去的所有东西都会消失在虚空中。

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

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

因此,如果只想重定向 stdout,那么可以使用 <>操作符(基本上它所指向的位置就是数据流向的位置)

假设我们想要禁止 stdout (重定向到/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

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

\pset pager off

要记住这个设置,将它添加到 ~/. psqlrc,例如: echo \\pset pager off >> ~/.psqlrc

参见 Psql 手册

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

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

若要禁止 psql的信息输出,请使用 -q运行它或在环境中设置 QUIET=1


要产生结果并抛弃它们,你可以用以下方法将 stdout重定向到 /dev/null:

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

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

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

但我不建议这样做,因为它会丢弃错误信息,而这些信息可能会警告您某些地方出了问题。您还会生成结果并将它们丢弃,这是低效的; 最好不要首先通过调整查询来生成结果。

我也在寻找这个,我在服务器故障的 类似的问题中找到了方法:

psql -P pager=off <other params>

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

这里还有另一个选项,它的优点是不需要记住 psql 选项名等等。

psql ... | cat
psql -U user -P pager=off -d database -c 'SQL';

这种语法在 SSH 会话中对我很有用:

psql db user --command "select * from table007" -A -P pager

这就是 PAGER

只需在命令 关掉中输入 \pset pager 0即可

那么

输入 \pset pager 1如果你想把它再次 开始。它用于长输出