干货教你在PostgreSql中使用JSON字段

2023-10-31

通过本文可掌握在pg数据库中如何正确使用json字段,如何进行数据查询,在where子查询中如何使用,以及对json值进行聚合查询使用.

概述

JSON 代表 JavaScript Object Notation。JSON是开放的标准格式,由key-value对组成。JSON的主要用于在服务器与web应用之间传输数据。新建表如下:

CREATE TABLE "public"."biz_orders" (  "ID" int8 NOT NULL DEFAULT nextval('"biz_orders_ID_seq"'::regclass),  "info" json NOT NULL);

表初始化语句:

INSERT INTO "biz_orders"("ID", "info") VALUES (1, '{"name":"张三","items":{"product":"啤酒","qty":6}}');INSERT INTO "biz_orders"("ID", "info") VALUES (2, '{"name":"李四","items":{"product":"辣条","qty":8}}');INSERT INTO "biz_orders"("ID", "info") VALUES (3, '{"name":"王五","items":{"product":"苹果","qty":18}}');INSERT INTO "biz_orders"("ID", "info") VALUES (4, '{"name":"赵一","items":{"product":"香蕉","qty":20}}');

使用

1、简单查询

select * from biz_orders;

2、查询使用->操作符,查询json中所有顾客作为键

SELECT info -> 'name' AS customer FROM biz_orders;

3、下面使用->>操作获取所有顾客姓名作为值

SELECT info ->> 'name' AS customer FROM biz_orders;

4、根据json对象的key查询值

SELECT   info -> 'items' ->> 'product' as productFROM   biz_ordersORDER BY   product;

5、where查询中使用json字段​​​​​​​

SELECT   info ->> 'name' AS customerFROM   biz_ordersWHERE   info -> 'items' ->> 'product' = '辣条'

6、case 查询​​​​​​​

SELECT   info ->> 'name' AS customer,   info -> 'items' ->> 'product' AS productFROM   biz_ordersWHERE   CAST (      info -> 'items' ->> 'qty' AS INTEGER   ) = 6

7、聚合函数​​​​​​​

SELECT  MIN( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),  MAX( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),  SUM( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),  AVG( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ) FROM  biz_orders;

8、类型查询​​​​​​​

SELECT  json_typeof ( info -> 'items' -> 'qty' ) FROM  biz_orders;

总结

通过以上例子,知道在pg数据库中如何存储json数据,并且掌握基本的查询,在查询条件中使用json,在聚合函数中使用。虽然,关系型数据库的强项不是在于json处理,而MongoDb或者Redis等NoSQL更适合做这类处理,但是在不引入一个新数据存储的情况下,利用现有架构解决生产问题。随着pg甚至mysql不断向前发展,相信未来对于json等数据支持会越来越好,性能也会越来越高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

干货教你在PostgreSql中使用JSON字段 的相关文章

随机推荐

  • C++ 一行代码删除string字符串中的“\n“、“\r“、“\t“ 和 所有空白字符

    这篇博客记录如何删除C 字符串中的回车 换行 制表符和所有的空白字符 方式一 示例 std string str n r t abc n t r cba r t n std cout lt lt str lt lt std endl 运行截
  • Websocket握手

    当客户端想要使用 WebSocket 协议与服务端进行通信时 首先需要确定服务端是否支持 WebSocket 协议 因此 WebSocket 协议的第一步是进行握手 WebSocket 握手采用 HTTP Upgrade 机制 客户端可以发
  • gpio子系统在sysfs中构建leds类

    1 内核配置 CONFIG GPIO SYSFS y CONFIG GPIOLIB y 1 CONFIG GPIO SYSFS 决定sysfs是否支持gpio子系统 也就是能否在 sys class 目录下看到gpio类 2 CONFIG
  • lua静态检查

    最近接了个组内的项目 代码是lua开发 由别的人写好 我进行调试 没想到呀 代码写完竟然都没有静态检查 到处都是坑 天了噜 程序员最怕的是什么 填坑呀 还是填别人的坑 没办法 只好一个一个的把坑填上 填完坑 不禁想问 难道写完代码 静态检查
  • Basic Level 1094 谷歌的招聘 (20分)

    题目 2004 年 7 月 谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌 如下图 用于招聘 内容超级简单 就是一个以 com 结尾的网址 而前面的网址是一个 10 位素数 这个素数是自然常数 e 中最早出现的 10 位连续数字 能找
  • redis设置密码加密

    修改redis conf的配置文件 映射或者禁止一些高危命令 后面为空即为禁止 rename command FLUSHALL rename command CONFIG rename command EVAL eg rename comm
  • uniapp中uni-load-more的使用

    1 引入uniloadmore import uniLoadMore from components uni load more uni load more vue components uniLoadMore 2 data中写的内容 re
  • MySQL遇到错误:1217 - Cannot delete or update a parent row: a foreign key constraint fails

    遇到问题 今天在准备 删库跑路 的时候 有的数据表再删除的时候报了以下错误 1217 Cannot delete or update a parent row a foreign key constraint fails 本着有事找度娘的原
  • 设计模式之中介者模式

    中介者模式 1 项目需求 设计一个智能家庭 家庭中包括各种设备 比如闹钟 咖啡机 电视机 窗帘等 完成各个设备之间的协同工作 假设流程为 闹钟响起 gt 咖啡机开始做咖啡 gt 窗帘自动落下 gt 电视机开始播放 这次项目的需求和外观模式一
  • 使用Python,OpenCV进行卡类型及16位卡号数字的OCR

    使用Python OpenCV进行卡类型及16位卡号数字的OCR 1 效果图 2 原理 2 1 OCR A字体 2 2 检测过程步骤 2 3 优化 3 源代码 参考 这篇博客将介绍如何通过OpenCV和Python使用模板匹配执行光学字符识
  • mysql 表级锁之读锁、写锁

    语法 lock tables tablename read write或 lock table tablename read write 表级锁 读锁 当MySQL的一个进程为某一个表开启读锁之后 其他的进程包含自身都没有权利去修改这个表的
  • Advanced Leve 1005 Spell It Right (20 point(s))

    Theme Given a non negative integer N your task is to compute the sum of all the digits of N and output every digit of th
  • CDH6.3.2之Kerberos安全认证

    问题导读 1 Kerberos认证原理是什么 2 Kerberos如何部署 3 CDH集群如何启用Kerberos 4 如何在Kerberos安全环境使用HFDS 01 PART Kerberos简介 Kerberos是一种计算机网络授权协
  • 2、怎么对printf重定向的?

    原文见这篇文章 以及这篇 调试代码时 需要将需要的信息发送到串口 这就要对printf进行重定向 正点原子的重定向代码如下 printf打印串口函数 if 1 pragma import use no semihosting 标准库需要的支
  • STM32cubeMX配置工程(全过程+修改MCU方法+注意事项)

    1 修改默认的固件包下载路径 避免占用C盘空间 2 选择ACCESS TO MCU 3 在跳出的界面中的Part Number中搜索对应的芯片型号 4 选好后在右下角双击对应的芯片 然后跳出配置界面 左边可以配置外设 右边可以配置每个IO口
  • srand()和rand()函数详解

    头文件 C语言
  • React入门第一天(绑定事件,动态渲染,修改样式、传参)

    案例一 绑定事件 动态渲染 import React Component from react export default class App extends Component constructor props super props
  • 打造酷炫RecyclerView 进入 item动画效果

    参考链接 点击这里
  • mysql分表后的联合查询_MySQL分库分表分表后数据的查询(5th)

    前言 在分表完之后显然对于数据的查询会变的比较的复杂 特别是在表的关联方面 在有些情况下根本就不能使用JOIN 其实个人是比较鼓励将那些大的JOIN SQL拆分成几个小的SQL来查询数据 这样虽然总体的效率可能会稍稍下降 如果使用了连接池完
  • 干货教你在PostgreSql中使用JSON字段

    通过本文可掌握在pg数据库中如何正确使用json字段 如何进行数据查询 在where子查询中如何使用 以及对json值进行聚合查询使用 概述 JSON 代表 JavaScript Object Notation JSON是开放的标准格式 由