暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】等待 PostgreSQL 15 – IS JSON 谓词

原创 剩余价值 2022-05-18
352

原文作者:安德鲁·邓斯坦

原文地址: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论