gpt4 book ai didi

json - Postgres JSON 到 JSONB

转载 作者:行者123 更新时间:2023-11-29 13:00:28 24 4
gpt4 key购买 nike

我们有大量使用 Postgres 9.3 将 json 数据插入/更新到 JSON 列的 PLPGSQL 代码

我们希望随着时间的推移转换代码以转移到 JSONB 格式并利用更好的索引和新运算符。

有没有一种方法可以做到这一点而无需重写我们所有的代码以使用新的 JSONB 格式。

例如,我们有很多接受和返回JSON的函数,粗略的例子:-

FUNCTION foo(payload JSON) RETURNS JSON AS
$$
BEGIN
...
INSERT INTO baa(json, name) VALUES(payload, 'name');
RETURN '{"message" : "done"}'::JSON

END
$$ LANGUAGE PLPGSQL;

我的理想是无需重写函数即可将 json 转换为 jsonb。我在插入之前尝试了一个触发器函数来执行此操作,但这不起作用,因为 postgres 查询语法检查器首先到达那里:-

ERROR:  column "json" is of type jsonb but expression is of type json

我怀疑我无能为力,将不得不重写所有代码(1000 行),但我想我会把它放在那里看看是否有一个聪明的想法可以让我做CAST 插入/更新并为重写争取一些时间。

最佳答案

jsonjsonb 之间引入隐式转换很简单,但您不应该这样做。尽管很烦人,但调整代码是正确的做法。

原因是当您在 jsonjsonb 之间进行转换时,您会遭受重大的性能损失。 PostgreSQL 必须将 json 解析为哈希表,或将 jsonb 哈希表格式化回平面 json 文本。大量内存分配、大量处理器工作、大量 CPU 缓存流失。你不想一直这样做。

语义上也有差异。特别是,jsonb 不保留对象中键的顺序,也不保留重复的键。 json 可以。所以 some_json_col::jsonb::jsonsome_json_col 不同。

一个体面的文本编辑器和查找/替换将使您的工作变得非常容易,即使是在大量代码上也是如此。是时候进行编辑了。

关于json - Postgres JSON 到 JSONB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com