PostgreSQL9.5和JSONB的强大功能

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

PostgreSQL9.5和JSONB的强大功能

[TOC]

介绍

原文地址

在PostgreSQL9.5中引入了新的JSONB功能,极大的增强了PG的NOSQL能力,本篇文章通过一些例子演示了如何使用这些强大的功能。
JSON特性从9.2版本开始引入,并在以后的新版本中不断的增强这些功能,

如果您能json的操作还不太了解,建议您看看以前的文章。

NoSQL with PostgreSQL 9.4 and JSONB
JSONB type performance in PostgreSQL 9.4
PostgreSQL anti-patterns: Unnecessary json/hstore dynamic columns

连接两个jsonb对象

在9.5中引入的新的JSONB操作符号

# select '{"a":3}'::jsonb || '{"b":4}'::jsonb;

     ?column?
------------------
 {"a": 3, "b": 4}
(1 row)

# select '{"a":3}'::jsonb || '{"b":"a6"}'::jsonb;

      ?column?
---------------------
 {"a": 3, "b": "a6"}
(1 row)

这个功能,相当于insert和update的功能的合并,如果在原来的对象中不存在新增加的jsonb子对象,则增加,否则,则更新为新的对象.并且,不区分新的对象的类型,

使用减号-删除对象

使用减号-删除已经存在的键值对中的一个对象

select '{"a":3}'::jsonb - 'a';

?column?
\----------
 {}
(1 row)

select '{"a":3,"b":"AAA"}'::jsonb - 'a';

   ?column?
\-----------
 {"b": "AAA"}
(1 row)

如果jsonb对象量个数组,则你可以用 减数字 的形式用索引来删除数组元素,数组以0开头


select '["AAA","BBB","CCC"]'::jsonb -1;
    ?column?
----------------
 ["AAA", "CCC"]
(1 row)

删除嵌套数组

select 
'{"person":{"name":"张三","sex":"female","birthday":"1977-01-01"}}'::jsonb 
\#- '{person,birthday}';
                   ?column?
-----------------------------------------------
 {"person": {"sex": "female", "name": "张三"}}
(1 row)

或者

select '{"person":{"name":"张三","sex":"female","birthday":"1977-01-01"}}'::jsonb \#- '{person,birthday}'::text[];
                   ?column?
-----------------------------------------------
 {"person": {"sex": "female", "name": "张三"}}
(1 row)

新函数jsonb_set

select jsonb_set('{"person":{"name":"张三"}}'::jsonb,
'{person,name}',
'"李四"'::jsonb,
false); 

          jsonb_set
------------------------------
 {"person": {"name": "李四"}}
(1 row)


select jsonb_set('{"person":{"name":"张三"}}'::jsonb,
'{person,sex}',
'"female"'::jsonb,
true); 


                   jsonb_set
-----------------------------------------------
 {"person": {"sex": "female", "name": "张三"}}
 

注意

  1. 第三个参数必须是一个合法的jsonb类型,也就是说字符串类型必须先用双引号引起来,再用单引号引起来。
    2.第四个的布尔参数,是如果不存在这个值,是否新增,如果为true,则当不存在这个键名和值时,会增加到对象中。

美化json

下面的例子不用多说,让显示的json更直观一些。

select jsonb_pretty(jsonb_set('{"person":{"name":"张三"}}'::jsonb,                                            '{person,sex}',                                                                                                       '"female"'::jsonb,                                                                                                    true));

       jsonb_pretty
--------------------------
 {                       +
     "person": {         +
         "sex": "female",+
         "name": "张三"  +
     }                   +
 }
(1 row)

总结

通过以上的例子,我们可以看到,postgreSQL也是一个NOSQL数据库,因此,如果我们能熟悉PostgreSQL,那么,我们就可以在一种数据库上同时使用NOSQL和SQL技术,以避免使用不同的产品及技术造成的产品复杂性的增加和后续维护的难度。

Use PostgreSQL,Use Everywhere.

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
14天前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
3月前
|
存储 关系型数据库 MySQL
PolarDB优势功能
PolarDB优势功能
|
6月前
|
存储 关系型数据库 数据库
深入了解 PostgreSQL:功能、特性和部署
PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。本文将详细介绍 PostgreSQL 的功能、特性以及如何部署和使用它。
222 1
深入了解 PostgreSQL:功能、特性和部署
|
7月前
|
SQL 关系型数据库 测试技术
PolarDB的Online DDL功能验证实验
本场景带您体验如何在PolarDB-X中进行Online DDL。
949 0
|
28天前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
2月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
42 7
|
2月前
|
关系型数据库 Linux Shell
Centos系统上安装PostgreSQL和常用PostgreSQL功能
Centos系统上安装PostgreSQL和常用PostgreSQL功能
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL企业版与标准版功能对比:如何选择适合您的版本?
随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL企业版和标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。但在功能上,这两个版本有很多差异,我们该如何选择呢?
49 2
|
3月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能【1月更文挑战第13天】【1月更文挑战第65篇】
30 2
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版:强大功能,超高性能,满足企业级需求
PolarDB MySQL版:强大功能,超高性能,满足企业级需求 在当今信息化社会,企业对于数据处理的需求日益增长,如何选择一款高性能、高可靠性且成本合理的数据库成为了一大挑战。阿里巴巴的PolarDB MySQL版应运而生,它不仅兼容MySQL,还具备传统数据库所不具备的优势,为企业提供了更高效、更可靠的数据处理方案。
107 3