原文作者:安德鲁·邓斯坦
原文地址:https://www.depesz.com/2022/04/01/waiting-for-postgresql-15-is-json-predicate/
2022 年 3 月 28 日,Andrew Dunstan提交了补丁:
是 JSON 谓词 此补丁介绍了 SQL 标准 IS JSON 谓词。它运作 在表示 JSON 的 text 和 bytea 值以及 json 和 jsonb 类型。每个测试都有一个 IS 和 IS NOT 变体。测试是: 是 JSON [值] 是 JSON 数组 是 JSON 对象 是 JSON 标量 是 JSON 吗?没有唯一键 这些大多是不言自明的,但请注意 IS JSON WITHOUT UNIQUE 当 IS JSON 为真时,KEYS 为真,且 IS JSON WITH UNIQUE KEYS 为 当 IS JSON 为真时为真,除非它是 JSON OBJECT 为真并且存在 是重复键(应用于 jsonb 值时绝不会出现这种情况)。 尼基塔·格鲁霍夫 审稿人包括(排名不分先后)Andres Freund、Alexander Korotkov, Pavel Stehule, Andrew Alsup, Erik Rijkers, Zihong Yu, Himanshu Upadhyaya,丹尼尔古斯塔夫森,贾斯汀普里兹比。 讨论:https ://postgr.es/m/cd0bb935-0158-78a7-08b5-904886deac4b@postgrespro.ru
这是一系列补丁中的下一个,为 Pg 添加了越来越多的 SQL/JSON 功能。
这次我们得到检查/谓词。
通常,它们会根据左侧的内容返回真/假。让我们看看它的实际效果:
= $选择 '1' 是JSON , 'ab' 是JSON; ? 列?| ? 列? ----------+---------- t | f (1 行)
显然,如果我在真正的 json 值上运行 IS JSON,它总是正确的:
= $ select json_array ( 1 , 2 , 'a' ) 是json; ? 列? ---------- 吨 (1 行)
但我们现在可以轻松检查 json 值的类型:
= $ select v , v是json 数组json_array , v是json 对象json_object , v是json 标量json_scalar from unnest
( array [ ' 12 ' , '"abc"' , ' [ 1,2,3]' , '{"a":12}' ] ) v;
v | json_array | json_object | json_scalar
----------+------------+--------------+----------- --
12 | f | f | t
"ABC" | f | f | t
[ 1 , 2 , 3 ] | 吨 | f | f
{ "a" : 12 } | f | 吨 | F
(4 行)很酷。还有“带有唯一键的 JSON”,它的工作方式如下:
= $ select v , v是带有 唯一 键
的json来自unnest ( array [ '12' , '"abc"' , '[1,2,3]' , '{"a":12,"b":23} ' , '{"a":12,"a":23}' ] ) v;
v | ? 列?
-----------------+---------
12 | t
"ABC" | t
[ 1 , 2 , 3 ] | t
{ "a" : 12 , "b" : 23 } | t
{ "a" : 12 , "a" : 23 } | f
(5 行)看起来真的很好,并且会使在 json 上工作的查询更具可读性。感谢所有相关人员。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




