IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> PostgreSQL 15 JSON 函数增强 -> 正文阅读

[大数据]PostgreSQL 15 JSON 函数增强

PostgreSQL 15 Beta 1 版已经发布,正式版预计 2022 年下半年推出。新版本为开发者提供了许多新功能,例如新的 MERGE 语句、JSON 以及正则表达式函数的增强。

早在 2012 年发布的 PostgreSQL 9.2 版本就引入了 JSON 支持,而 SQL/JSON 标准比这个时间晚了五年。PostgreSQL 15 增加了更多的标准 SQL/JSON 函数,包括 SQL/JSON 构造函数、查询函数以及将 JSON 数据转换为表的能力。

SQL/JSON 构造函数

PostgreSQL 新版本增加的 SQL/JSON 构造函数包括:

  • JSON()
  • JSON_SCALAR()
  • JSON_SERIALIZE()
  • JSON_ARRAY()
  • JSON_ARRAYAGG()
  • JSON_OBJECT()
  • JSON_OBJECTAGG()

这些函数比已有的 JSON 函数功能更强大,例如:

select json('"json"');
   json   
----------
 "json"
 
select json('[1,2,3]');
  json   
---------
 [1,2,3]

select json('{"a": 123, "b": [true, "foo"], "a": "bar"}' with unique keys);
ERROR:  duplicate JSON object key value

select json_array( 1, '2022', 'json' );
          json_array           
-------------------------------
 [1, "2022", "json"]

select json_arrayagg(datname order by datname) from pg_database;
                       json_arrayagg                       
-----------------------------------------------------------
 ["hrdb", "postgres", "template0", "template1"]

select json_object( 'id': 1, 'aid': json_array(1,2,3));
         json_object          
------------------------------
 {"id" : 1, "aid" : [1, 2, 3]}

select json_objectagg( datname: oid) from pg_database;
                                          json_objectagg                                           
---------------------------------------------------------------------------------------------------
 { "hrdb" : "16668", "postgres" : "14617", "template0" : "14616", "template1" : "1" }

其中,JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 是聚合函数,可以将数据聚合成 JSON 数组和对象。

IS JSON 谓词

IS JSON 谓词可以用于测试数据是否满足 JSON 数据格式,返回结果为 t 或者 f。具体包括:

  • IS [NOT] JSON [VALUE]
  • IS [NOT] JSON ARRAY
  • IS [NOT] JSON OBJECT
  • IS [NOT] JSON SCALAR
  • IS [NOT] JSON WITH | WITHOUT UNIQUE KEYS

例如:

SELECT
    js,
    js IS JSON "is json",
    js IS NOT JSON "is not json",
    js IS JSON SCALAR "is scalar",
    js IS JSON OBJECT "is object",
    js IS JSON ARRAY "is array"
FROM
    (VALUES ('123'), ('"abc"'), ('{"a": "b"}'), ('[1,2]'), ('abc')) foo(js);

     js     | is json | is not json | is scalar | is object | is array
------------+---------+-------------+-----------+-----------|-------------
 123        | t       | f           | t         | f         | f
 "abc"      | t       | f           | t         | f         | f
 {"a": "b"} | t       | f           | f         | t         | f
 [1,2]      | t       | f           | f         | f         | t
 abc        | f       | t           | f         | f         | f
(5 rows)

SQL/JSON 查询函数

SQL/JSON 查询函数用于查询 JSON 数据中的指定节点,节点通过 JSON 路径表达式指定。新版本增加的查询函数包括:

  • JSON_EXISTS()
  • JSON_QUERY()
  • JSON_VALUE()

JSON_EXISTS() 函数用于判断指定的路径上是否存在 JSON 数据,例如:

select json_exists( '{"id":123}'::jsonb, '$.id' ), json_exists( '{"id":123}'::jsonb, '$.aid' );
 json_exists | json_exists 
-------------+-------------
 t           | f

JSON_QUERY() 函数用于返回指定路径上的 JSON 数据,例如:

select json_query('[{"x": "aaa"},{"x": "bbb"},{"x": "ccc"}]'::jsonb, '$[1].x' );
 json_query 
------------
 "bbb"

JSON_VALUE() 函数用于将指定路径上的 JSON 元素转换为标量值,例如:

SELECT JSON_VALUE('"123.45"', '$' RETURNING float);
 json_value
------------
     123.45

JSON_TABLE 函数

JSON_TABLE 函数用于将 JSON 数据转换为 SQL 表数据。这是一个很强大的转换函数,我们看一个简单的示例:

select * from json_table(
    '[{"a":10,"b":20},{"a":30,"b":40}]'::jsonb,
    '$[*]'
    COLUMNS (
        column_a int4 path '$.a',
        column_b int4 path '$.b'
    )
);
 column_a | column_b 
----------+----------
       10 |       20
       30 |       40

总结

PostgreSQL 15 增加了大量符合 SQL/JSON 标准的函数,使得 JSON 数据的处理更加简单。

PostgreSQL = SQL + NoSQL!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-23 00:55:58  更:2022-06-23 00:56:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:32:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码