399

我在 Ubuntu 上使用 PostgreSQL 8.4。我有一个表格,其中的列c1通过cN. 这些列足够宽,以至于选择所有列会导致一行查询结果多次换行。因此,输出很难阅读。

当查询结果仅包含几行时,如果我可以查看查询结果以使每行的每一列都在单独的行上,那将很方便,例如

 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 设置可以让我做这样的事情?

4

8 回答 8

676

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

\x on

会做我想要的。这是一些示例输出:

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             | 
于 2012-03-07T16:12:16.757 回答
330

(New) Expanded Auto Mode: \x auto

New for Postgresql 9.2; PSQL automatically fits records to the width of the screen. previously you only had expanded mode on or off and had to switch between the modes as necessary.

  • If the record can fit into the width of the screen; psql uses normal formatting.
  • If the record can not fit into the width of the screen; psql uses expanded mode.

To get this use: \x auto

Postgresql 9.5 Documentation on PSQL command.


Wide screen, normal formatting:

 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)

Narrow screen, expanded formatting:

-[ 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

How to start psql with \x auto?

Configure \x auto command on startup by adding it to .psqlrc in your home folder and restarting psql. Look under 'Files' section in the psql doc for more info.

~/.psqlrc

\x auto
于 2013-04-19T16:06:04.567 回答
88

你有这么多选择,你怎么会感到困惑:-)?主要控制有:

# \pset format
# \H
# \x
# \pset pager off

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

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

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

-[ 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”类似,它试图将数据整齐地放在屏幕上,但如果标题不适合,则会退回到未对齐的状态。这是一个包装的例子:

 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
于 2013-05-16T18:48:34.897 回答
31

一件有趣的事情是我们可以水平查看表格,而无需折叠。我们可以使用PAGER环境变量。psql 使用它。你可以设置

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

或者只是less -S它已经在命令行中可用,如果没有正确的位置。-S 查看展开的线条。您可以使用它传入任何自定义查看器或其他选项。

我在Psql Horizo​​ntal Display中写过更多

于 2015-11-26T11:03:02.410 回答
27

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

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

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

export PAGER="pspg -s 6" 

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

sudo apt install pspg

pspg 示例

于 2018-02-16T23:28:12.413 回答
7

还请务必查看 \H,它可以打开/关闭 HTML 输出。在控制台上不一定容易阅读,但对于转储到文件中(参见 \o)或粘贴到编辑器/浏览器窗口进行查看很有趣,尤其是对于多行相对复杂的数据。

于 2012-08-01T00:00:30.453 回答
6

如果你正在寻找command-line mode像我一样的 psql,

是语法--pset expanded=auto

psql 命令行选项:
-P 扩展=auto
--pset 扩展=auto
-x
--expanded
...

另一种方法是-q选项参考

于 2020-12-22T04:14:24.297 回答
1

您可以使用zenity将查询输出显示为 html 表。

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

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

    mypager.sh一样保存它

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

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

  • 然后登录到psql程序然后执行命令\H

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

于 2016-11-30T13:04:59.960 回答