Alternate output format for psql
我在Ubuntu上使用PostgreSQL 8.4。我有一张从
当查询结果仅构成几行时,如果我可以查看查询结果,使每一行的每一列都在单独的行上,这是很方便的,例如。
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?
在启动时配置
~/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 |
一件有趣的事情是我们可以水平地看桌子,而不需要折叠。我们可以使用
1 | export PAGER='/usr/bin/less -S' |
或者,如果命令行中已经提供了
我在psql水平显示中写了更多
1 2 3 4 5 | git clone https://github.com/okbob/pspg.git cd pspg ./configure make make install |
然后确保更新
1 | export PAGER="pspg -s 6" |
其中,
1 | sudo apt install pspg |
还要确保签出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中。