文档章节

在PostgreSQL命令行psql里格式化输出json字段

DavinciRes
 DavinciRes
发布于 2015/12/10 15:42
字数 321
阅读 543
收藏 0

在pgsql的psql命令里直接select输出json字段是一长串字符,这对阅读非常不友好,查了好久也没查到pgsql有格式化输出json字段的函数,只好折腾一番。

表结构如下:

pgsql=# \d test
   资料表 "pgsql.test"
 栏位 |  型别   | 修饰词 
------+---------+--------
 id   | integer | 非空
 info | jsonb   | 非空
索引:
    "test_pkey" PRIMARY KEY, btree (id)
    "test_info_idx" gin (info)

SELECT的格式化输出:

pgsql=# select id,replace(
                replace(
                        regexp_replace(info::text , ', "' , concat(',',chr(10),chr(9),'"'),'g') ,
                                '{' , concat('{',chr(10),chr(9))) ,
                '}' , concat(chr(10),'}')) as info from test;
 id |                             info                              
----+---------------------------------------------------------------
  1 | {                                                            +
    |         "a": [1, 2, 3],                                      +
    |         "b": [4, 5, 6]                                       +
    | }
  2 | {                                                            +
    |         "a": [7, 8, 9],                                      +
    |         "b": [10, 11, 12]                                    +
    | }
  3 | {                                                            +
    |         "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",      +
    |         "name": "Angela Barton",                             +
    |         "tags": ["enim",                                     +
    |         "aliquip",                                           +
    |         "qui"],                                              +
    |         "address": "178 Howard Place, Gulf, Washington, 702",+
    |         "company": "Magnafone",                              +
    |         "latitude": 19.793713,                               +
    |         "is_active": true,                                   +
    |         "longitude": 86.513373,                              +
    |         "registered": "2009-11-07T08:53:22 +08:00"           +
    | }
(3 行记录

为了方便今后每次调用,写成函数:

create function format_json(text) returns text as $$
select replace(replace(regexp_replace($1 , ', "' , concat(',',chr(10),chr(9),'"'),'g'),
'{' , concat('{',chr(10),chr(9))) ,'}' , concat(chr(10),'}')) as json_s;
$$ language sql;

这样看起来就简洁直观多了:

pgsql=# select id,format_json(info::text) as info from test where id=3;
 id |                             info                              
----+---------------------------------------------------------------
  3 | {                                                            +
    |         "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",      +
    |         "name": "Angela Barton",                             +
    |         "tags": ["enim",                                     +
    |         "aliquip",                                           +
    |         "qui"],                                              +
    |         "address": "178 Howard Place, Gulf, Washington, 702",+
    |         "company": "Magnafone",                              +
    |         "latitude": 19.793713,                               +
    |         "is_active": true,                                   +
    |         "longitude": 86.513373,                              +
    |         "registered": "2009-11-07T08:53:22 +08:00"           +
    | }
(1 行记录)



© 著作权归作者所有

DavinciRes
粉丝 7
博文 11
码字总数 7030
作品 0
朝阳
系统管理员
私信 提问
PostgreSQL学习手册(十五) 客户端命令

零、口令文件: 在给出其它PostgreSQL客户端命令之前,我们需要先介绍一下PostgreSQL中的口令文件。之所以在这里提前说明该文件,是因为我们在后面的示例代码中会大量应用该文件,从而保证我...

长平狐
2012/08/27
204
0
PostgreSQL连接和认证选项

Linux下面经常用到psql命令。 切换Linux系统账号到root账号。 该账号下即可输入psql命令。演示代码如下 psql帮助信息如下 PostgreSQL默认不允许非本机连接,非本机连接数据库服务器需要修改p...

白豆腐徐长卿
2017/11/06
244
0
PostgreSQL学习手册(十五) 客户端命令

零、口令文件: 在给出其它PostgreSQL客户端命令之前,我们需要先介绍一下PostgreSQL中的口令文件。之所以在这里提前说明该文件,是因为我们在后面的示例代码中会大量应用该文件,从而保证我...

长平狐
2012/09/06
614
0
postgresql常见命令及操作

  pgsql已经更新到beta11了不同版本的服务器启动或相关命令、配置可能会有不同所以得根据pg版本进行操作。下面记录一些工作中常用到的一些操作主要包括服务启动、备份/恢复数据、数据目录迁...

zhoujie0111
2018/06/02
0
0
Ubuntu下Postgresql-8.4安装及配置

第一步:在Ubuntu下安装Postgresql sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4 以上指令安装服务端和命令行客户端psql。 /usr/lib/postgresql/8.4/......

红薯
2010/06/29
3.8K
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 他只能用这个办法劝你注意身体了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# Kodaline《High Hopes》 《High Hopes》- Kodaline 手机党少年们想听歌,请使劲儿戳(这里) @xiaoshiyue :仙女...

小小编辑
31分钟前
804
15
Spring Boot Actuator 整合 Prometheus

简介 Spring Boot 自带监控功能 Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。这一节结合 Prometheus 、Grafana 来更加直观...

程序员果果
40分钟前
10
0
Linux文件查找命令详解

对于文件查找,我们最好用的还是属于find命令了,在说find命令之前,先把另外几个查找命令介绍一下。 目录 0x01 查询命令介绍 0x02 find命令介绍 0x01 查询命令介绍 在介绍之前,首先先了解一...

无心的梦呓
40分钟前
7
0
快速掌握的测试用例优先级划分方法

怎么样的设计才能算测试用例 引自:IEEE Standard 610 (1990): A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exe......

测者陈磊
44分钟前
6
0
[mycat]Attribute value "roadNodeId,version" of type NMTOKEN must be a name token

不能逗号配两个字段的主键 primaryKey="roadNodeId,version" Caused by: io.mycat.config.util.ConfigException: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 105; Attrib......

Danni3
49分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部