关于postgresql:psql的备用输出格式

Alternate output format for psql

我在Ubuntu上使用PostgreSQL 8.4。我有一张从c1cN列的表。列足够宽,选择所有列会导致一行查询结果换行多次。因此,输出很难读取。

当查询结果仅构成几行时,如果我可以查看查询结果,使每一行的每一列都在单独的行上,这是很方便的,例如。

1
2
3
4
5
6
7
 c1: <VALUE OF ROW 1's c1>
 c2: <value of row 1'
s c1>
 ...
 cN: <VALUE OF ROW 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2'
s c1>
 etc.

我正在服务器上运行这些查询,我不希望在服务器上安装任何其他软件。有没有一个psql设置可以让我做类似的事情?


我只需要花更多的时间看文档。这个命令:

1
\x ON

会做我想做的。以下是一些示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT * FROM dda WHERE u_id=24 AND dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               |
dda_nickname       |
dda_account_name   |
cu_id              | 1
abd_id             |


(新)扩展的自动模式:x自动

PostgreSQL 9.2的新功能;PSQL自动将记录调整到屏幕宽度。以前,您只需要打开或关闭模式,并根据需要在模式之间切换。

  • 如果记录可以适应屏幕的宽度;psql使用普通格式。
  • 如果记录不能适应屏幕宽度;PSQL使用扩展模式。

要获得此功能,请使用以下命令:x auto

psql命令的PostgreSQL 9.5文档。

宽屏,正常格式:

1
2
3
4
5
6
7
 id | TIME  |       humanize_time             | VALUE
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 ROWS)

窄屏幕,扩展格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-[ RECORD 1 ]-+---------------------------
id            | 1
TIME          | 09:30
humanize_time | Early Morning - (9.30 am)
VALUE         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
TIME          | 11:30
humanize_time | Late Morning - (11.30 am)
VALUE         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
TIME          | 13:30
humanize_time | Early Afternoon - (1.30pm)
VALUE         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
TIME          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
VALUE         | 930

如何用x auto启动psql?

在启动时配置\x auto命令,方法是将其添加到主文件夹中的.psqlrc并重新启动psql。有关更多信息,请查看psql文档中的"文件"部分。

~/PSQLRC

1
\x auto


你有这么多的选择,你怎么会感到困惑呢?—)主要控制如下:

1
2
3
4
# \pset format
# \H
# \x
# \pset pager off

每个人都有选择和与其他人的互动。最自动的选项是:

1
2
# \x off;\pset format wrapped
# \x auto

较新的"x auto"选项仅在需要时切换到逐行显示。

1
2
3
4
5
6
7
8
9
-[ RECORD 1 ]---------------
id          | 6
description | This IS a gallery OF oilve oil brands.
authority   | I love olive oil, AND wanted TO CREATE a place FOR
reviews AND comments ON various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A
authority   | Testing

旧的"pset-format-wrapped"与此类似,它试图在屏幕上整齐地容纳数据,但如果标题不适合,则返回到未对齐状态。以下是包装的示例:

1
2
3
4
5
6
 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This IS a gallery OF oilve     | I love olive oil, AND wanted TO
    ; oil brands.                    ;  CREATE a place FOR reviews AND
    ;                                ;  comments ON various types.
 19 | Test Test A                    | Testing


一件有趣的事情是我们可以水平地看桌子,而不需要折叠。我们可以使用PAGER环境变量。psql利用它。你可以设定

1
export PAGER='/usr/bin/less -S'

或者,如果命令行中已经提供了less -S,如果没有正确的位置,则只提供less -S。-以查看展开的线条。您可以通过它传递任何自定义查看器或其他选项。

我在psql水平显示中写了更多


pspg是一个简单的工具,它提供高级的表格格式、水平滚动、搜索和许多其他功能。

1
2
3
4
5
git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

然后确保更新PAGER变量,例如在你的~/.bashrc中。

1
export PAGER="pspg -s 6"

其中,-s代表配色方案(1-14)。如果您使用的是PGDG存储库,只需安装一个包(在类似Debian的发行版上):

1
sudo apt install pspg

pspg example


还要确保签出h,它将打开/关闭HTML输出。在控制台上不一定容易读取,但对于转储到文件(请参阅o)或粘贴到编辑器/浏览器窗口中进行查看很有意思,尤其是对于多行相对复杂的数据。


可以使用Zenity将查询输出显示为HTML表。

  • 首先使用以下代码实现bash脚本:

    cat>'/tmp/sql.op';zenity--text-info--html--filename='/tmp/sql.op';

    像mypager.sh一样保存它

  • 然后通过将脚本的完整路径设置为值导出环境变量页导航。

    例如:-export pager='/path/mypager.sh'

  • 然后登录到psql程序,然后执行命令h

  • 最后执行任何查询,表格输出将以HTML表格格式显示在Zenity中。