postgresql模糊查询json类型字段内某一属性值
需求场景:
目录以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类型字段内某一属性值的更多相关文章
- 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段
业务扩展字段在PostgreSQL数据库中经常会使用json格式的数据来存储,然而mybatis默认是没有实现json类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的Typ ...
- 使用like查询text类型字段
使用like查询text类型字段 public bool Exists(GetReadType GRT, ClientMessageGetRead TypeID, string MessageID, ...
- Mysql JSON字段提取某一个属性值的函数
mysql从5.7开始才支持JSON_EXTRACT等 JSON相关的函数, 项目里用到的mysql是5.6的,需要提取JSON字段里某一个属性值进行统计, 自己写了一个笨的提取方法: CREATE ...
- 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更
java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...
- mysql关联模糊查询他表字段
如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...
- PostgreSQL - 模糊查询
前言 like.not like在SQL中用于模糊查询,%表示任意个字符,_表示单个任意字符,如果需要在模糊查询中查询这两个通配符,需要用ESCAPE进行转义,如下: select * from ta ...
- 实现combobox模糊查询的时候报错 InvalidArgument=“0”的值对于“index”无效
因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下: List<string> listOnit = new L ...
- json字符串转java对象,json中字段名称与对象属性名称不一致
json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决
- 控制层解析post请求中json数据的时候,有些属性值为空
原因: 1.默认json数据解析的时候,值会赋给键的首字母是小写的封装的bean中的属性,如果没有首字母小写的属性,也不会报错.即bean中有getXXX方法时,从json到model会增加xxx属性 ...
随机推荐
- java将所有的字符串转换为大写或小写
public class DaXie { public static void main(String[] args) { /**将所有的字符串转换成大写或小写字母并打印出来*/ String str ...
- STL next_permutation 算法原理和实现
转载自:https://www.cnblogs.com/luruiyuan/p/5914909.html 目标 STL中的next_permutation 函数和 prev_permutation 两 ...
- windows环境搭建Vue开发环境
一.安装node.js(https://nodejs.org/en/) 下载完毕后,可以安装node,建议不要安装在系统盘(如C:). 二.设置nodejs prefix(全局)和cache(缓存)路 ...
- VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别
在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机的网络连接是非常重要的一环,当我们为虚拟机配置网络连接时,我们可以看到如下图所示的几种网络连接模式:桥 ...
- Oracle数据库统一审核的启用测试与关闭
环境:windows server 2008.Oracle 12c R2 下面的步骤,连接为sysdba,除非指定了其它方式. (1)运行如下查询,确定统一审核是否启用了: select value ...
- Python基础06_list
尽量多挤点时间用来学点知识吧. list是不同于字符串的,字符串定义后不可修改,而list是可以修改的. 以下是学习笔记: #!/usr/bin/env python # coding:utf-8 l ...
- 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法
转载:http://www.cnblogs.com/wang-meng/p/8887436.html 1,申请邮箱 地址为:http://mdu.edu.rs/ 邮箱的前缀可以改成自己喜欢的字符 ...
- 安装Python 3.6 在Ubuntu 16.04 LTS 版本
Collecting tensorflow Could not find a version that satisfies the requirement tensorflow (from versi ...
- 公众号及H5支付
本篇主要记录微信支付中公众号及H5支付全过程. 1|1准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 1|2配置篇 公众号或者服务号中 -------开发-- ...
- 使用 jest 测试 react component 的配置,踩坑。
首先安装依赖 npm i jest -g npm i jest babel-jest identity-obj-proxy enzyme enzyme-adapter-react-15.4 react ...