需求场景:

目录以jsonb格式存储在数据库表t的chapter字段中,需要菜单路径中包含指定字符串(比如“语文”或者“上学期”)的menu

以下为chapter字段存储json示例:

{
"menu": {
"text": "第一级菜单(语文)>第二级菜单(上学期)>第三级菜单(第一章节)",
"menuItem": [
{
"root": true,
"id": "1",
"pId": "",
"text": "第一级菜单(语文)"
},
{
"root": false,
"id": "2",
"pId": "1",
"text": "第二级菜单(上学期)"
},
{
"root": false,
"id": "3",
"pId": "2",
"text": "第三级菜单(第一章节)"
}
]
}
}

实现(有关postgresql json类型支持的操作符可以参考:官方文档https://blog.csdn.net/u012129558/article/details/81453640):

SELECT chapter FROM t WHERE chapter #>>'{menu,text}'like '%语文%'

对应mybatis mapper配置文件:
<if test="chapter != null and chapter!= ''">
chapter #>>'{menu,text}' LIKE concat('%',#{chapter},'%')
</if>

优化(创建全文索引):

CREATE INDEX i_chapter_text_jsonb_gin ON resource USING gin((chapter #>>'{menu,text}') gin_trgm_ops);

创建索引可能会遇到的问题:

1.ERROR: operator class "gin_trgm_ops" does not exist for access method "gin"

解决方案:

先执行 CREATE EXTENSION pg_trgm;

2.ERROR: could not open extension control file "/usr/pgsql-9.6/share/extension/pg_trgm.control": No such file or directory

解决方案:

https://dba.stackexchange.com/questions/165300/how-to-install-the-additional-module-pg-trgm

Ubuntu/Debian:

sudo apt install postgresql-contrib
Redhat/Centos sudo dnf install postgresql10-contrib

另外关于索引可以参考(一篇大杂烩):

https://juejin.im/entry/586b448761ff4b00578c1b7a

postgresql模糊查询json类型字段内某一属性值的更多相关文章

  1. 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

    业务扩展字段在PostgreSQL数据库中经常会使用json格式的数据来存储,然而mybatis默认是没有实现json类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的Typ ...

  2. 使用like查询text类型字段

    使用like查询text类型字段 public bool Exists(GetReadType GRT, ClientMessageGetRead TypeID, string MessageID, ...

  3. Mysql JSON字段提取某一个属性值的函数

    mysql从5.7开始才支持JSON_EXTRACT等 JSON相关的函数, 项目里用到的mysql是5.6的,需要提取JSON字段里某一个属性值进行统计, 自己写了一个笨的提取方法: CREATE ...

  4. 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

    java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...

  5. mysql关联模糊查询他表字段

    如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...

  6. PostgreSQL - 模糊查询

    前言 like.not like在SQL中用于模糊查询,%表示任意个字符,_表示单个任意字符,如果需要在模糊查询中查询这两个通配符,需要用ESCAPE进行转义,如下: select * from ta ...

  7. 实现combobox模糊查询的时候报错 InvalidArgument=“0”的值对于“index”无效

    因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下: List<string> listOnit = new L ...

  8. json字符串转java对象,json中字段名称与对象属性名称不一致

    json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决

  9. 控制层解析post请求中json数据的时候,有些属性值为空

    原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...

随机推荐

  1. day72 关于rbac组件的小部分面试题

    rbac的权限组件   基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构  以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...

  2. Forth 内存布局

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  3. JAVA循环结构

    JAVA循环结构:顺序结构只能执行一次,如果要执行多次需要用到循环 JAVA中的循环结构有while:do...while:for: 1.while循环:先判断布尔表达式中的值,若为true,执行循环 ...

  4. BiLstm原理

    Lstm这里就不说了,直接说Bilstm. 前向的LSTM与后向的LSTM结合成BiLSTM.比如,我们对“我爱中国”这句话进行编码,模型如图所示. 前向的依次输入“我”,“爱”,“中国”得到三个向量 ...

  5. ChIP-seq 学习内容

    chip-seq 流程图 书籍资料 工具 UCSU 安装 使用 原理 手册 Swiss在线分析工具 短序列比对工具 BWA 流程 格式处理 序列比对 peak-calling motif 可视化 输出 ...

  6. 王者荣耀交流协会第五次Scrum立会

    会议时间:2017年10月24号   11:40-12:12,时长32分钟. 会议地点:信息科学与技术学院107教室 昨天工作: 组长使用ZedGraph实现了折线图的生成,基本符合需求,组员们分别完 ...

  7. supervisord.conf

    ; Sample supervisor config file.;; For more information on the config file, please see:; http://supe ...

  8. [LeetCode&Python] Problem 925. Long Pressed Name

    Your friend is typing his name into a keyboard.  Sometimes, when typing a character c, the key might ...

  9. A Language Modeling Approach to Predicting Reading Difficulty-paer

    Volume:Proceedings of the Human Language Technology Conference of the North American Chapter of the ...

  10. maven编译错误maven-assembly-plugin:2.2-beta-5:assembly (default-cli) on project

    maven对项目编译时报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta ...