相关文章推荐
威武的馒头  ·  linux ...·  1 年前    · 
开朗的骆驼  ·  poi的XSSFWorkbook转SXSSF ...·  1 年前    · 
温暖的遥控器  ·  java httpclient post ...·  1 年前    · 
正直的冲锋衣  ·  关于java连接sql ...·  1 年前    · 
坚强的汤圆  ·  css中overflow-x:auto无效 ...·  1 年前    · 

有时候我们需要使用PostgreSQL这种结构化数据库来存储一些非结构化数据,PostgreSQL恰好又提供了json这种数据类型,这里我们来简单介绍使用jsonb的一些常见操作。

PostgreSQL 提供了 json和 jsonb两种 json类型,两者的主要区别就是,json查询相对慢一些,插入会快一点,而jsonb则相反,查询效率会高一点,插入会慢一点。

下面进入我们今天的正题

create table purchase_order
    id                     serial not null primary key,
    tag                    jsonb

数据也是非常简单

INSERT INTO purchase_order (id, tag) VALUES (4787, '[{"uid": 1, "name": "标签名1", "add_time": "2021-05-29 17:00:00"}, {"uid": 2, "name": "标签名2", "add_time": "2021-05-29 17:00:00"}]');

重点是tag

"uid": 1, "name": "标签名1", "add_time": "2021-05-29 17:00:00" }, { "uid": 2, "name": "标签名2", "add_time": "2021-05-29 17:00:00"

这里来实现一些简单的操作

我们查询 id = 4787 且 json 中 uid = 1 的tag

-- 嵌套子查询
select * from (
select jsonb_array_elements(tag) as tt from purchase_order where id =  4787) a
where  tt -> 'uid' = '1';
-- 或者这种方式
SELECT
    id,r
    purchase_order s, jsonb_array_elements(s.tag) r
WHERE
    s.id =  4787  and r->>'uid' = '2' ;

查询结果
在这里插入图片描述
如果仅仅是查询json中包含 uid = 3的结果可以像这样查询

SELECT tag FROM purchase_order
WHERE id =  4787 and tag @> '[{"uid": 3}]';

新增也比较简单,我们在原有的json上在增加个对象。
原先的json对象是这样的

"uid": 1, "name": "标签名1", "add_time": "2021-05-29 17:00:00" }, { "uid": 2, "name": "标签名2", "add_time": "2021-05-29 17:00:00"

执行如下语句

UPDATE purchase_order SET tag = tag || '[{
	"uid": 3,
	"name": "标签名3",
	"add_time": "2021-05-29 17:00:00"
}]' where  id = 4787;
	"uid": 1,
	"name": "标签名1",
	"add_time": "2021-05-29 17:00:00"
}, {
	"uid": 2,
	"name": "标签名2",
	"add_time": "2021-05-29 17:00:00"
}, {
	"uid": 3,
	"name": "标签名3",
	"add_time": "2021-05-29 17:00:00"

如果我要删除上面 uid 为3的值,使用如下sql即可

UPDATE purchase_order
       SET tag = t.js_new
           SELECT jsonb_agg( (tag ->> ( idx-1 )::int)::jsonb ) AS js_new
             FROM purchase_order
            CROSS JOIN jsonb_array_elements(tag)
             WITH ORDINALITY arr(j,idx)
            WHERE j->>'uid' NOT IN ('3')
          ) t;

我们现在要把 id = 4787
name = '标签名1'
的修改为name = '标签new'

sql 如下

UPDATE purchase_order AS g
   SET tag = REPLACE(tag::text, '"name": "标签名1"','"name": "标签new"')::json
 WHERE g.tag IN ( SELECT g.tag
                     FROM purchase_order AS g
                    CROSS JOIN jsonb_array_elements(g.tag) AS j
                    WHERE id = 4787 and  j ->>'uid' = '1' )

其实还有很多其他方式去实现,但是总体来说修改删除都不是特别方便和好维护,建议修改删除的时候直接当做字符串去全量更新即可,这样好维护一点。

另外附带一份官方的 jsonb 操作文档连接给大家自己去查阅吧
链接
注意文档选择合适的版本哦

有时候我们需要使用PostgreSQL这种结构化数组来存储一些非结构化数据,PostgreSQL恰好又提供了json这种数据类型,这里我们来简单介绍使用jsonb的一些常见操作。PostgreSQL 提供了 json和 jsonb两种 json类型,两者的主要区别就是,json查询相对慢一些,插入会快一点,而jsonb则相反,查询效率会高一点,插入会慢一点。下面进入我们今天的正题表结构create table purchase_order( id
本文实例讲述了Python 操作 PostgreSQL 数据库。分享给大家供大家参考,具体如下: 我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成。 sycopg2是用于Python编程语言的PostgreSQL数据库适配器。 psycopg2是非常小,快速,稳定的。 您不需要单独安装此模块,因为默认情况下它会随着Python 2.5.x版本一起发布。 pip3 install python-psycopg2 pip3 install psycopg2-binary 连接到数据库 以下Python代码显示了如何连接到现有的数据库。 如
在工作中,对PostgreSQL数据库操作,最难的也就是对jsonb类型的数据进行增删改查了,其他字段跟MySQL数据库没什么区别,现在我就分享一下平时工作中总结的相关操作,这是我承包公司一年sql脚本开发中遇到并总结的,公司使用这种数据库的可以收藏,提高你的开发速度。注意,示例中ext为jsonb类型。 一·、jsonb类型更新语法 (1)普通更新-方式一 UPDATE ...
JSON 代表 JavaScript Object Notation。JSON是开放的标准格式,由key-value对组成。JSON的主要用于在服务器与web应用之间传输数据。与其他格式不同,JSON是人类可读的文本格式。 PostgreSQL从9.2版本开始支持JSON数据类型,并提供很多函数和操作符维护json数据。下面我们创建一张新表用于说明json数据类型: CREATE TABLE or...
本课程的第一、二课     讲述如何在linux服务器安装postgreSQL,安装PHP,安装Nginx或Apache网站环境     并细致讲述了添加网站,使用PHP连接postgreSQL,让初学者更快更易上手使用postgreSQL  PHP对数据库的增删改查 本课程的第三、第四课     讲述了如何使用PHP对PGSQL数据库进行增删改查操作,非常实用,让初学者更快掌握PHP对postgreSQL操作方法,提高初学者的兴趣。 1. jsonjsonb 区别 两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别。json写入快,读取慢,jsonb写入慢,读取快。 2. 常用的操作符
PostgreSQL作为关系型数据库,支持标准SQL的语法,包括增删改查操作。下面是一些常见的PostgreSQL增删改查语句的示例: 1. 插入数据(INSERT): - 示例:INSERT INTO users (name, age) VALUES ('Tom', 20); - 说明:以上语句将在users表中插入一条记录,name字段为'Tom',age字段为20。 2. 查询数据(SELECT): - 示例:SELECT * FROM users; - 说明:以上语句将查询users表中的所有记录,并返回结果集。 3. 更新数据(UPDATE): - 示例:UPDATE users SET age = 25 WHERE id = 2; - 说明:以上语句将更新users表中id为2的记录,将其年龄(age)更新为25岁。 4. 删除数据(DELETE): - 示例:DELETE FROM users WHERE age >= 30; - 说明:以上语句将删除users表中年龄大于等于30岁的所有记录。 请根据需要使用相应的语句进行增删改查操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [PostgreSQL中的数据相关的基础操作(增删改查)](https://blog.csdn.net/lukeUnique/article/details/130977322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]