问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

postgresql json jsonb 有什么区别

发布网友 发布时间:2022-04-09 02:01

我来回答

2个回答

懂视网 时间:2022-04-09 06:22

OR REPLACE FUNCTION "json_object_del_path"( "json" json, "key_path" TEXT[] ) RETURNS json LANGUAGE sql IMMUTABLE STRICT AS $function$ SELECT CASE WHEN ("json" -> "key_path"[l] ) IS NULL THEN "json" ELSE CASE COALESCE(array_length("key_path", 1), 0) WHEN 0 THEN "json" WHEN 1 THEN "json_object_del_key"("json", "key_path"[l]) ELSE "json_object_set_key"( "json", "key_path"[l], "json_object_del_path"( COALESCE(NULLIF(("json" -> "key_path"[l])::text, ‘null‘), ‘{}‘)::json, "key_path"[l+1:u] ) ) END END FROM array_lower("key_path", 1) l, array_upper("key_path", 1) u $function$;

 

CREATE OR REPLACE FUNCTION "json_object_del_key"(
 "json"  json,
 "key_to_del" TEXT
)
 RETURNS json
 LANGUAGE sql
 IMMUTABLE
 STRICT
AS $function$
SELECT CASE
 WHEN ("json" -> "key_to_del") IS NULL THEN "json"
 ELSE (SELECT concat(‘{‘, string_agg(to_json("key") || ‘:‘ || "value", ‘,‘), ‘}‘)
  FROM (SELECT *
   FROM json_each("json")
   WHERE "key" <> "key_to_del"
  ) AS "fields")::json
END
$function$;

 

CREATE OR REPLACE FUNCTION "json_object_update_key"(
 "json"  json,
 "key_to_set" TEXT,
 "value_to_set" anyelement
)
 RETURNS json
 LANGUAGE sql
 IMMUTABLE
 STRICT
AS $function$
SELECT CASE
 WHEN ("json" -> "key_to_set") IS NULL THEN "json"
 ELSE (SELECT concat(‘{‘, string_agg(to_json("key") || ‘:‘ || "value", ‘,‘), ‘}‘)
  FROM (SELECT *
   FROM json_each("json")
   WHERE "key" <> "key_to_set"
   UNION ALL
  SELECT "key_to_set", to_json("value_to_set")) AS "fields")::json
END
$function$;
CREATE OR REPLACE FUNCTION "json_object_set_keys"(
 "json"  json,
 "keys_to_set" TEXT[],
 "values_to_set" anyarray
)
 RETURNS json
 LANGUAGE sql
 IMMUTABLE
 STRICT
AS $function$
SELECT concat(‘{‘, string_agg(to_json("key") || ‘:‘ || "value", ‘,‘), ‘}‘)::json
 FROM (SELECT *
  FROM json_each("json")
  WHERE "key" <> ALL ("keys_to_set")
  UNION ALL
 SELECT DISTINCT ON ("keys_to_set"["index"])
  "keys_to_set"["index"],
  CASE
   WHEN "values_to_set"["index"] IS NULL THEN ‘null‘::json
   ELSE to_json("values_to_set"["index"])
  END
  FROM generate_subscripts("keys_to_set", 1) AS "keys"("index")
  JOIN generate_subscripts("values_to_set", 1) AS "values"("index")
  USING ("index")) AS "fields"
$function$;

CREATE OR REPLACE FUNCTION "json_object_set_key"(
 "json"  json,
 "key_to_set" TEXT,
 "value_to_set" anyelement
)
 RETURNS json
 LANGUAGE sql
 IMMUTABLE
 STRICT
AS $function$
SELECT concat(‘{‘, string_agg(to_json("key") || ‘:‘ || "value", ‘,‘), ‘}‘)::json
 FROM (SELECT *
  FROM json_each("json")
  WHERE "key" <> "key_to_set"
  UNION ALL
 SELECT "key_to_set", to_json("value_to_set")) AS "fields"
$function$;

 

 

 

CREATE OR REPLACE FUNCTION "json_object_set_path"(
 "json"  json,
 "key_path" TEXT[],
 "value_to_set" anyelement
)
 RETURNS json
 LANGUAGE sql
 IMMUTABLE
 STRICT
AS $function$
SELECT CASE COALESCE(array_length("key_path", 1), 0)
  WHEN 0 THEN to_json("value_to_set")
  WHEN 1 THEN "json_object_set_key"("json", "key_path"[l], "value_to_set")
  ELSE "json_object_set_key"(
  "json",
  "key_path"[l],
  "json_object_set_path"(
  COALESCE(NULLIF(("json" -> "key_path"[l])::text, ‘null‘), ‘{}‘)::json,
  "key_path"[l+1:u],
  "value_to_set"
  )
  )
 END
 FROM array_lower("key_path", 1) l,
 array_upper("key_path", 1) u
$function$;

usage:

s1=# SELECT json_object_del_key (‘{"hello":[7,3,1],"foo":{"mofu":"fuwa", "moe":"kyun"}}‘,
     ‘foo‘),
  json_object_del_path(‘{"hello":[7,3,1],"foo":{"mofu":"fuwa", "moe":"kyun"}}‘,
     ‘{"foo","moe"}‘);

 json_object_del_key |  json_object_del_path
---------------------+-----------------------------------------
 {"hello":[7,3,1]} | {"hello":[7,3,1],"foo":{"mofu":"fuwa"}}

 

Pgsql数据库jsonb操作函数集合

标签:

热心网友 时间:2022-04-09 03:30

  你好,JSONB 同时属于 JSON (JavaScript Object Notation) 数据类型,jsonb 和 json 的输入数据几乎完全通用,最大的差别体现在效率上,json 存储的数据几乎和输入数据一样,存储的是未解析的数据,调用函数时使用效率较低; 而 jsonb 存储的是分解的 binary 格式数据,使用时不需要再解析了,因此使用上效率较高; 另一方面 json 在写入时较快,而 jsonb 写入时由于需要转换导致写入较慢。希望能帮到你。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 现在流行的去客厅化设计,有什么好处? 七年的情人关系说断就能断的干净吗 相处一年的情人感情说断就能断吗? 处了六七年的情人怎么会说断就断,我不明白? 和老板做情人可以说断就断吗?和平断了之后还能在手下工作吗 五年的婚外情能说断就断吗? 但我们没有了。的英文翻译 女人和情人处了10多年关系能断吗? “好的,还有别的是吗?”、“没有了,非常感谢!”用英语怎么翻译? 现在我没有了翻译软件英语再那么说 情人分手真能做到断的干干净净吗,真能做到老死不相往来吗? 我有个情人二年多关系了,为什么说断就断? 什么都失去了或者什么都没有了,用英语翻译 没了英语怎么说 情人之间真的能断吗 没有了 的英文表达 (最后句子)有哪些 七年的情人关系说断就能断的干净吗? 6年的情人关系男方说断能断吗? 6年的情人关系能说断就断吗? 美国现任第一夫人地名字 对于家庭装修,不要客厅的设计到底是否可取? 客厅一点装饰品都没有,显得很冷清没有家庭的气氛,如何设计让客厅变得温馨? 脱离原有设计框架,目前流行的无茶几客厅,有哪些优缺点? 客厅不要千篇一律,有什么新颖又实用的布局方式? 没有阳台的客厅怎么装修设计 不带吊顶的客厅应该怎么设计? 家里的客厅比较大,感觉有些空旷,该怎样设计装修呢? 钉钉入职登记表可以不写真实年龄吗 请问用钉钉软件身份证验证以后,年龄是公开的吗? 钉钉软件身份证验证,年龄信息在钉钉好友里面是公开的吗? 最新电影上映2022最火推荐 PSP和switch选那个? switch和psp哪个好玩 最近好看的电影推荐 买psp3000还是switch 掌机哪个好 现在最新电影有那些? 有什么最新电影 psp的内存卡ns能用吗 现在最新电影有哪些