有时候我们需要使用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. json 和jsonb 区别
两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别。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 ]