我在我的 PostgreSQL 服务器上运行一个脚本:
psql db -f sql.sql
来自bash
或在cron
脚本中。
它一直试图用more
or对输出进行分页less
。
如何禁用结果分页psql
?
我想做的就是改变数据,我不关心任何输出。
我在我的 PostgreSQL 服务器上运行一个脚本:
psql db -f sql.sql
来自bash
或在cron
脚本中。
它一直试图用more
or对输出进行分页less
。
如何禁用结果分页psql
?
我想做的就是改变数据,我不关心任何输出。
要禁用分页但保留输出,请使用:
\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
但我不建议这样做,因为它会丢弃可能会警告您某些事情不正确的错误信息。你也在产生结果并把它们扔掉,这是低效的;你最好不要通过调整你的查询一开始就产生它们。
这是另一种选择。它确实具有您不必记住 psql 选项名称等的优点。
psql ... | cat
作为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
psql -U user -P pager=off -d database -c 'SQL';
psql db -f sql.sql > /dev/null
此语法在 SSH 会话中对我有用:
psql db user --command "select * from table007" -A -P pager