Postgresql中json和jsonb类型区别

在我们的业务开发中,可能会因为特殊【历史,偷懒,防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中,这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象。所以我们也可能会经常用到这类格式数据;PG数据库存储json类型数据可以有两种数据类型JSON和JSONB

json和jsonb区别

json和jsonb都可以json和jsonArray类型的数据
在这里插入图片描述
实际上主要区别在于写入和查询效率以及数据存储上面

性能

  • json 数据类型存储了输入文本的精确副本,这意味着每次需要访问或修改数据时,数据库都必须重新解析该文本。这会导致在处理大型 JSON 文档或进行频繁的 JSON 操作时性能下降。
  • 相比之下,jsonb 数据类型将 JSON 数据存储为一种分解好的二进制格式。虽然这在输入时会稍微慢一些,因为需要进行额外的转换,但它在处理时要快得多,因为不需要进行解析。

存储方式

  • json 数据类型保留了输入文本的完整结构,包括可能存在的空格、JSON 对象内部键的顺序以及重复的键/值对。这意味着它提供了一种“所见即所得”的存储方式,但也可能导致不必要的空间占用和可能的性能开销。
  • jsonb 数据类型在存储时会删除不必要的空格、不保留对象键的顺序,并且只保留每个键的最后一个值(如果存在重复键)。这种存储方式更加紧凑,并且可以提高查询和处理的效率。

索引支持

  • jsonb 数据类型支持基于 GIN(Generalized Inverted Index)或 B-tree 的索引,这使得基于 JSON 数据的查询可以更加高效。通过索引,您可以快速检索 JSON 文档中的特定元素或值。
  • json 数据类型则不支持这样的索引,这可能会限制其在大型数据集或需要高性能查询的应用中的使用。

所以我们在不同情况下可以选择不同的数据格式【PS:业务系统大概率是进行单条数据新增,批量数据查询和过滤,这些情况选择什么数据格式大家应该都比较清楚了,如果有特殊情况可以特殊考虑处理,其实根本就是空间换时间】

其他

在创建表的时候发现还有一种数据类型jsonpath,这个数据类型可以存储解析json格式的表达式
在这里插入图片描述

SELECT jsonb_path_query(jsonb_1 ,  jsonpath_1) FROM tb_json;

结果如下
在这里插入图片描述
在一般的业务场景下我们的json格式一般都是固定的,但是有一些特殊情况比如我们抓取一些非格式话的数据的时候可以存储下解析规则,然后对规则进行补全,逐步完善我们数据解析的能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/342699.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程切换环境变量

目录 一.进程切换 1.进程特性 2.进程切换 1.进程切换的现象 2.如何实现 3.现实例子 2.环境变量 一.基本概念 二.常见环境变量 三.查询常见环境变量的方法 四.和环境变量相关的命令 五.环境变量表的组织方式 六.使用系统调用接口方式查询环境变量 1.getenv 2.反思 …

如何学习使用淘宝API?淘宝API运营场景

学习使用淘宝API涉及对其功能、分类、调用方法及实际应用的综合理解。下面按部分详细解释如何系统地学习和掌握淘宝API的使用: 淘宝API接口入门 了解淘宝开放平台:淘宝开放平台为开发者提供了一个可以与淘宝数据进行交互的平台,涵盖了丰富的A…

神经网络 torch.nn---优化器的使用

torch.optim - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.optim — PyTorch 2.3 documentation 反向传播可以求出神经网路中每个需要调节参数的梯度(grad),优化器可以根据梯度进行调整,达到降低整体误差的作用。下面我们对优化器进行介绍。 …

uniapp内置的button组件的问题

问题描述 由于想要使用uniapp内置button组件的开放能力,所以就直接使用了button,但是他本身带着边框,而且使用 border:none;是没有效果的。 问题图片 解决方案 button::after {border: none;} 正确样式 此时的分享…

6.更复杂的光照

一、Unity的渲染路径 渲染路径决定了光照是如何应用到Unity Shader中的。我们需要为每个Pass指定它使用的渲染路径 如何设置渲染路径? Edit>Project Settings>Player>Other Settinigs>Rendering 如何使用多个渲染路径?如:摄像…

kafka-集群搭建(在docker中搭建)

文章目录 1、kafka集群搭建1.1、下载镜像文件1.2、创建zookeeper容器并运行1.3、创建3个kafka容器并运行1.3.1、9095端口1.3.2、9096端口1.3.3、9097端口 1.4、重启kafka-eagle1.5、查看 efak1.5.1、查看 brokers1.5.2、查看 zookeeper 1、kafka集群搭建 1.1、下载镜像文件 d…

makefile2

makefile的条件判断 运行make。 替换 make -c make-f …… 还可以 man make来查看其他的make命令。

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…

01_初识微服务

文章目录 一、微服务概述1.1 什么是微服务1.2 对比微服务架构与单体架构1.3 微服务设计原则1.4 微服务开发框架1.5 简单理解分布式部署与集群部署 二、微服务的核心概念2.1 服务注册与发现2.2 微服调用(通信)2.3 服务网关2.4 服务容错2.5 链路追踪参考链…

C语言小例程6/100

题目:输入三个整数x,y,z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值…

电商平台的消费增值策略

电商平台通过创新的消费增值策略,为用户提供了全新的激励体验。这种策略通过积分奖励和价值提升机制,鼓励用户持续参与并增强用户对平台的忠诚度。 消费积分的奖励机制 在电商平台,每一笔交易都会根据预设的比例回馈给消费者一部分资金&…

MATLAB format

在MATLAB中,format 是一个函数,用于控制命令窗口中数值的显示格式。这个函数可以设置数值的精度、显示的位数等。以下是一些常用的 format 命令: format long:以默认的长格式显示数值,通常显示15位有效数字。format s…

Mysql学习(三)——SQL通用语法之DML

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 DML添加数据修改数据删除数据 总结 DML DML用来对数据库中表的数据记录进行增删改操作。 添加数据 -- 给指定字段添加数据 insert into 表名(字段1,字…

引用(C++)和内联函数

前言&#xff1a;本文主要讲解C语法中引用如何使用和使用时的一些技巧 基本语法 引用就是取别名 #include <iostream> using namespace std; int main() {int a 10;int& b a;//给a取别名为bcout << a << endl;cout << b << endl;return 0…

【python】OpenCV—Bitplane

学习来自&#xff1a; 位平面分割&#xff08;Bit-Plane Slicing&#xff09;使用OpenCVPython进行图像处理的初学者指南 位平面 位平面&#xff08;bitplane&#xff09;是一个在计算机科学中用于描述图像数据的概念&#xff0c;具体定义如下&#xff1a; 【定义】&#x…

SpringBoot实现发送邮件功能

目录 一、开启邮件服务 二、导入pom依赖 三、配置yml文件 四、发送邮件 4.1、发送文字邮件 4.2、发送html邮件 4.3、发送附件邮件 4.4、发送图片邮件 一、开启邮件服务 这里拿QQ邮箱举例。 翻到下面进行开启,之后获取授权码。 二、导入pom依赖 <dependency><…

kotlin 调用java的get方法Use of getter method instead of property access syntax

调用警告 Person.class public class Person {private String name;Person(String name) {this.name name.trim();}public String getName() {return name;}public void setName(String name) {this.name name;}public String getFullName() {return name " Wang&quo…

【漏洞复现】用友NC downCourseWare 任意文件读取漏洞

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具&#xff0c;用友NC提供了一系列业务管理模块&#xff0c;包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等&#xff0c;帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC …

使用python优雅的将PDF转为Word

使用python优雅的将PDF转为Word 先装这个优雅的库 pip install pdf2docx然后运行下面优雅的代码&#xff0c;将pdf路径和docx路径修改 from pdf2docx import Converter # path pdf_file C:\\Users\\phl\\Desktop\\软件工程期末\\软件工程模拟试题5.pdf docx_file C:\\User…