关于bash:在Psql输出中禁用包装

Disable wrapping in Psql output

在Linux中使用Psql时,如果我的SQL查询的结果包含许多列或长数据字符串,它将包装初始视图,只有当我滚动到侧面时它才会停止换行并在单独的行上显示每一行。

我尝试了各种\pset选项,如format unalignedformat alignedformat wrappedcolumns 0columns 1000,但除非我为文件生成静态输出,否则似乎没有一个完全停止换行。

如何将其设置为永不包装输出,同时仍然可滚动并使用默认的ascii表格式显示结果?


Psql使用系统查看器在控制台中显示其输出。在bash中,它可能使用less来提供它所提供的可滚动/可分页功能。要使用其他查看器或使用不同的设置,只需设置PAGER环境变量即可。

运行Psql以使用带有-S--chop-long-lines选项的less似乎对我有用:

1
PAGER="less -S" psql

您还可以通过键入-SEnter在查看less中的输出时启用此功能。


禁用select查询的包装输出。

pset pager on

pset pager off切换回旧的输出视图。


less -F-S标志会导致\d some_table在某些情况下不显示任何输出。

1
2
3
4
5
6
7
8
9
-F or --quit-if-one-screen
    Causes less to automatically exit if the entire file can be
    displayed on the first screen.

-S or --chop-long-lines
    Causes lines longer than the screen width to be chopped rather than folded.
    That is, the portion of a long line that does not fit in the screen width is
    not shown. The default is to fold long lines; that is, display the remainder
    on the next line.

像这样使用它们:

1
PAGER="less -S" psql

由于不得不手动退出更不方便,似乎更安全。


可能你应该使用aligned格式输出:

1
\pset format aligned

您可以检查所有可用格式以满足您的需求:

1
2
3
\pset format TAB
aligned          html             latex-longtable  unaligned        
asciidoc         latex            troff-ms         wrapped

您还应该检查环境中的PAGER配置值