关于PostgreSQL数据增删改查的日常总结(主要jsonb类型)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 在工作中,对PostgreSQL数据库操作,最难的也就是对jsonb类型的数据进行增删改查了,其他字段跟MySQL数据库没什么区别,现在我就分享一下平时工作中总结的相关操作,这是我承包公司一年sql脚本开发中遇到并总结的,公司使用这种数据库的可以收藏,提高你的开发速度。注意,示例中ext为jsonb类型。

在工作中,对PostgreSQL数据库操作,最难的也就是对jsonb类型的数据进行增删改查了,其他字段跟MySQL数据库没什么区别,现在我就分享一下平时工作中总结的相关操作,这是我承包公司一年sql脚本开发中遇到并总结的,公司使用这种数据库的可以收藏,提高你的开发速度。注意,示例中ext为jsonb类型。

一·、jsonb类型更新语法

(1)普通更新-方式一

UPDATE tenant_data_record
SET ext = jsonb_set (
  ext,
  '{update_category}',
  '2'
)

(2)普通更新-方式二

UPDATE tenant_data_record
SET ext = jsonb_set (
  ext,
  '{place}',
  '"北京"' :: jsonb
)
WHERE
  ID = 7903091958494211

(3)普通更新方式三

UPDATE tenant_data_record
SET ext = ext - 'place' || '{"place":5}'
WHERE ID = 7903091958494211

(4)更新字段为null

update tenant_data_record set ext
=jsonb_set(
ext,
'{type}',
'null'::jsonb)
 where id=7903091958494211

(5)更新字段为空,单引号和双引号要注意。

update tenant_data_record set ext
=jsonb_set(
ext,
'{type}',
'""')
 where id=7903091958494211

(6)更新一张表中的jsonb类型中一个字段为另一张表jsonb类型中一个字段

update customer_product SET ext = jsonb_set (customer_product.ext, '{team}', 
(select user_info.ext->'team' from user_info  where 
customer_product.create_by =  user_info.id::text))

二、新增jsonb字段操作

(1)jsonb里面还不存在该字段,使用更新方式就相当于添加字段

UPDATE tenant_data_record
SET ext = jsonb_set (ext, '{cplace}', '"北京"')
WHERE
  ID = 7903091958494211

(2)添加多个字段

UPDATE tenant_data_record
SET ext = ext - 'place' || '{"place":1,"place2":4}';

三、查询相关操作

(1)当开发拿不到权限时,查询表结构

select * from information_schema.columns
where  table_name = 'opportunity'

2)以json格式查询出jsonb数据

SELECT
  jsonb_pretty (ext)
FROM
  tenant_data_record
WHERE
  ext ->> 'type' = '2'
AND ID = 7903091958494211

(3)查询jsonb数据的类型

select  jsonb_typeof(ext->'shared_owner')  from customer

(3)查出来的数据时间戳转为日期

to_timestamp("coach_feedback".confirm_time / 1000) AT TIME ZONE 'PRC' AS 确认时间

(4)将两个jsonb类型字段求和查询出来,值为空时赋值默认值0

coalesce(ext->>'ward_potential','0')::NUMERIC+coalesce(ext->>'ward_potential','0')::NUMERIC

(5)查询出当月五号

select DATE(to_char(now(),'yyyy-MM-05'))

(6)身份证在excel显示中后四位为0,前面加引号,防止显示错误,引号前面加引号·进行中转义,所以看是有四个引号。

concat('''',c.id_number)

(7)查询出来的时间转时间戳显示

select  extract(epoch from to_timestamp('2020-03-27 14:55:59', 'YYYY-MM-DD HH24:MI:SS')) * 1000

(8)查询返回的jsonb数据带引号

c.ext->'hco_name'

(9)查询返回的jsonb数据不带引号,以文本返回,使用->>操作符

ext->>'score_date'

(10)根据数据库里面字段值替换不同值

 CASE
WHEN ext->'has_authorized'::text = 'true' THEN
  '是'
ELSE
  '否'
END 是否已授权,

(11)查询出来为空,赋值默认值

select COALESCE(b.price, 0) as price from fruit_sale b

三、where条件组装

(1)将array类型的jsonb数据转化为in条件进行筛选,查询结果用逗号分隔。

  SELECT
    string_agg (NAME, ',')
  FROM
    user_info u
  WHERE
    u. ID IN (
      SELECT
        jsonb_array_elements_text (C .ext -> 'shared_owner') :: int8
    )
) AS 负责人

(2)组装条件为当月五号之前

where DATE (
  to_char(
    to_timestamp(mr."month" / 1000) + INTERVAL '8 hours',
    'yyyy-MM-dd'
  )
) <= DATE (to_char(now(),'yyyy-MM-05'))

(3)日期比较

 DATE (
  to_char(
    to_timestamp(tot.start_date / 1000) + INTERVAL '8 hours',
    'yyyy-MM-dd'
  )
) <= DATE ('2019-09-10')
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
28天前
|
存储 关系型数据库 分布式数据库
PolarDB常见问题之PolarDB冷存数据到OSS之后恢复失败如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
1月前
|
SQL 关系型数据库 分布式数据库
在PolarDB中,行数评估是通过对表的统计数据、基数估计以及算子代价模型来进行估算的。
【2月更文挑战第14天】在PolarDB中,行数评估是通过对表的统计数据、基数估计以及算子代价模型来进行估算的。
82 1
|
1月前
|
关系型数据库 MySQL
Mysql基础第十九天,使用不同类型的链接
Mysql基础第十九天,使用不同类型的链接
24 0
Mysql基础第十九天,使用不同类型的链接
|
2月前
|
存储 关系型数据库 MySQL
MySQL - 索引类型详解
MySQL - 索引类型详解
|
2月前
|
关系型数据库 MySQL Docker
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
MySQL 5.7 timestamp类型设置default value为'0000-00-00 00:00:00'报错的解决方法
|
1天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为&#39;张三&#39;,`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, &#39;张三&#39;, 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES (&#39;张三&#39;, 20)`。
5 2
|
1天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
5 2
|
8天前
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
25天前
|
关系型数据库 MySQL OLAP
PolarDB +AnalyticDB Zero-ETL :免费同步数据到ADB,享受数据流通新体验
Zero-ETL是阿里云瑶池数据库提供的服务,旨在简化传统ETL流程的复杂性和成本,提高数据实时性。降低数据同步成本,允许用户快速在AnalyticDB中对PolarDB数据进行分析,降低了30%的数据接入成本,提升了60%的建仓效率。 Zero-ETL特性包括免费的PolarDB MySQL联邦分析和PolarDB-X元数据自动同步,提供一体化的事务处理和数据分析,并能整合多个数据源。用户只需简单配置即可实现数据同步和实时分析。
|
28天前
|
弹性计算 安全 关系型数据库
rds网络类型选取
云数据库RDS的网络类型选择包括经典网络、专有网络(VPC)、公共网络和私有网络。推荐使用VPC以实现高安全隔离,私有网络增加安全性且节省公网费用。根据业务需求和安全策略选择,如需内部访问选择同一VPC,外部访问则需公网并配以严格安全措施。最新阿里云RDS建议使用VPC并结合安全组、网络ACL和白名单保障安全,通过CEN实现跨地域通信。
16 7