我正在 PostgreSQL 服务器上运行一个脚本:
psql db -f sql.sql
从 bash或在 cron脚本。
bash
cron
它不断尝试使用 more或 less对输出进行分页。
more
less
如何在 psql中禁用结果分页?
psql
我想做的只是改变数据,我不想要任何输出内容。
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 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之间不能有空格
2>&1
最后,有时候最有趣的是,您可以通过使用 &>来抑制所有输出,以便在您希望它“完全安静”的时候使用
&>
psql db -f sql.sql &> /dev/null
若要禁用分页但 保留输出,请使用:
\pset pager off
要记住这个设置,将它添加到 ~/. psqlrc,例如: echo \\pset pager off >> ~/.psqlrc
echo \\pset pager off >> ~/.psqlrc
参见 Psql 手册。
在旧版本的 Pg 上,它只是一个切换,所以 \pset pager
\pset pager
要完全禁止查询输出,请在 psql脚本中使用 \o /dev/null。
\o /dev/null
若要禁止 psql的信息输出,请使用 -q运行它或在环境中设置 QUIET=1。
-q
QUIET=1
要产生结果并抛弃它们,你可以用以下方法将 stdout重定向到 /dev/null:
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 0
那么
输入 \pset pager 1如果你想把它再次 开始。它用于长输出
\pset pager 1