zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

POSTGRESQL 15 从等待中被驱逐的JSON新功能,只能祈祷 PostgreSQL 16

2023-02-18 16:23:53 时间

2022年4月8日 Andrew Dunstan 在关于POSTGRESQL 15 的功能中,提到功能主要有两个

1 docs for json functions

2 docs for aggregate functions

  • Added docs about json_agg_strict and jsonbjson_agg_strict
  • Added docs about json_object_agg_strict and jsonbjson_object_agg_strict
  • Added docs about json_object_agg_unique and jsonbjson_object_agg_unique
  • Added docs about json_object_agg_unique_strict and jsonbjson_object_agg_unique_strict
  • Added note about JSON_OBJECTAGG and JSON_ARRAYAGG constructors

但计划赶不上变化,在2022年09月22日,中关于json的功能被延后了,从POSTGRESQL 15 中被剔除出去了。并提出这个功能会在POSTGRESQL 16 中可能回归。

说到这里,到底是什么样的JSON的功能在PG15 中说好的要有,但是被移除了。

constructor syntax是什么样的其妙的关于JSON 的函数曾经被预计在 POSTGRESQL 15 中被使用

1 唯一键值函数 ,这个函数的功能是在你通过JSON 函数进行数据的输入中,在你的JSON 数据中进行键值的重复值的辨别。

举例

select json('{"a":12,"b":23}' with unique_keys); 如果在这里面的键值有重复的将不符合位置键值的要求,并会报错

ERROR: duplicate JSON object key value

同时还有一个函数匹配这个函数,举例

select json('{"a":12,"b":23}' without nique_keys);

2 jsonpath expressions 是针对JOSN 中的数据进行是否是JSON 的一个判断的函数,之前是有在这个功能的,但这里进行了强化。

这里针对JSONB 格式数据中的数据进行判断是否是JSON数据中是否存在 KEY

举例

select json_exists('{"a":123}'::jsonb,'

json_exists | json_exists

t f

这个功能能在建表中的CHECK 中使用如

create table user_profiles(

check (json_exists(address, '$windows')))

来强制插入的JSON 文件中是否有 windows key

3 jsonb 类型的array 数组转换为传统表格

举例:select * from json_table('[{"a":30,"b":50}]'::jsonb),

COLUMNS (

column_a int4 path '$.a',

column_b int4 path '$.b'

)

结果就是

column_a | column_b

30 50

通过这样的方法可以将JSON文件变换为二维表格,并格式化数据库。这点在当前JSON 格式的数据在应用程序中大量的使用,让POSTGRESQL 在JSONB 和 JSON 的数据处理中,保持1线的阵营是有利的。

但不幸的是,基于整体的结构的难度和时间的原因,同时还基于原有编码结构中,在这些功能,在加载数据后的性能等问题,导致在POSTGRESQL 15 这些对POSTGRESQL 在处理JSON 数据中的功能流产。

根据合并代码 team 的负责人的信息,实际上功能是可以被优化的,但是给出的POSTGRESQL 15 的发布时间点和功能优化之间剩余的时间,太短了,在讨论会中,还是决定针对POSTGRESQL 15的主要的新功能进行工作,并得出,还是建议可能的话,在下一个版本将JSON中的一些函数功能在进行推出。

在我们使用POSTGRESQL 15的新的功能中,我们也继续期待POSTGRESQL 16 中能对POSTGRESQL 在处理JSON 数据的功能进行强化。

部分信息来源

https://www.depesz.com/2022/03/31/waiting-for-postgresql-15-sql-json-constructors/