psql 的替代输出格式
Posted
技术标签:
【中文标题】psql 的替代输出格式【英文标题】:Alternate output format for psql 【发布时间】:2012-03-25 04:08:15 【问题描述】:我在 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 设置可以让我做这样的事情?
【问题讨论】:
【参考方案1】:我只是需要花更多的时间盯着文档。这个命令:
\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 |
【讨论】:
你也可以尝试\pset format Wrapped(允许的格式是unaligned、aligned、wrapped、html、latex、troff-ms)。如果显示足够窄,它将自动换行每一列。\x
将单独切换值,为您节省三个按键! (当您在宽输出和窄输出之间快速切换时很有用)。
如果您从 mysql 中寻找等同于 \G
的内容,请尝试将 \x\g\x
附加到查询末尾或在 ~/.psqlrc
中定义快捷方式添加 \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0'
,然后在末尾使用 :G
. (注意缺少分号)
是否可以在命令行中以某种方式传递“\x on
”或等效项?如果我可以保存(例如,通过使用 bash shell 别名)psql --something
,这样我总是可以默认打开该选项。
@machineghost 使用-P expanded=auto
或--pset expanded=auto
【参考方案2】:
还请务必查看 \H,它可以打开/关闭 HTML 输出。在控制台上不一定容易阅读,但对于转储到文件(参见 \o)或粘贴到编辑器/浏览器窗口进行查看很有趣,尤其是对于多行相对复杂的数据。
【讨论】:
【参考方案3】:(新)扩展自动模式:\x auto
Postgresql 9.2 的新功能; PSQL 自动使记录适应屏幕的宽度。以前您只有打开或关闭扩展模式,并且必须根据需要在模式之间切换。
如果记录可以适应屏幕的宽度; psql 使用普通格式。 如果记录不适合屏幕的宽度; psql 使用扩展模式。要实现这个用途:\x auto
Postgresql 9.5 Documentation on PSQL command.
宽屏,正常格式:
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)
窄屏,扩展格式:
-[ 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。 Look under 'Files' section in the psql doc for more info.
~/.psqlrc
\x auto
【讨论】:
有什么选项可以用dashes
完全包围normal formatted
表?我也喜欢外包装盒,MySQL
就是这样做的。【参考方案4】:
你有这么多选择,你怎么会感到困惑:-)?主要控制有:
# \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
【讨论】:
\x auto
和 \pset pager off
是一个不错的选择。
\x off; \pset format wrapped
和 \x auto
打算一起使用还是相互排斥?【参考方案5】:
一个有趣的事情是我们可以水平查看表格,而无需折叠。我们可以使用PAGER
环境变量。 psql 使用它。你可以设置
export PAGER='/usr/bin/less -S'
或者只是less -S
,如果它已经在命令行中可用,如果没有正确的位置。 -S 查看展开的线条。您可以使用它传入任何自定义查看器或其他选项。
我在Psql Horizontal Display写了更多
【讨论】:
答案真的很好。我很惊讶它没有被标记得更高。非常适合在终端工作的任何人。 这非常有帮助 这个很有用,但是怎么滚动到右边呢? @NieldeWet 对我来说使用左右箭头水平滚动有效。但我希望能够使用 VIM 绑定来做到这一点,但它确实有效。【参考方案6】:您可以使用 zenity 将查询输出显示为 html 表格。
首先使用以下代码实现 bash 脚本:
cat > '/tmp/sql.op'; zenity --text-info --html --filename='/tmp/sql.op';
像 mypager.sh
一样保存它然后通过将脚本的完整路径设置为值来导出环境变量PAGER。
例如:- export PAGER='/path/mypager.sh'
然后登录psql程序然后执行命令\H
最后执行任何查询,表格输出将以html表格格式以zenity显示。
【讨论】:
【参考方案7】: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 repositories,只需安装一个软件包(在类似 Debian 的发行版上):
sudo apt install pspg
【讨论】:
【参考方案8】:如果你和我一样在寻找 psql command-line mode
,
here 是--pset expanded=auto
的语法
psql 命令行选项: -P 扩展=自动 --pset 扩展=自动 -x --展开 ...
另一种方法是-q
选项ref
【讨论】:
以上是关于psql 的替代输出格式的主要内容,如果未能解决你的问题,请参考以下文章