我一直在使用Postgres将JSON对象存储为字符串,现在我想利用PG内置的json
和jsonb
类型来更有效地存储对象。
基本上,我想要在PG内解析字符串化的JSON并将其放入json
列中,而不必借助Python读取所有值并在那里进行解析。
理想情况下,我的迁移应该如下所示:
UPDATE table_name SET json_column=parse_json(string_column);
我查看了Postgres的JSON函数,似乎没有一种方法可以做到这一点,即使这似乎很简单。记录一下,我的JSON对象只是由字符串组成的一维数组。
有没有办法实现这个?
json
和jsonb
并不会更有效地 存储 对象。如果您只是存储和检索 JSON 值,则最好坚持使用text
。如果您希望数据库对数据进行处理(jsonb
)或检查其完整性(json
),则 JSON 类型很有趣。 - Laurenz Albejsonb
确实更有效地存储对象,因为它将其存储为二进制表示,而不是字符串表示。对于大型数据集,这可以在存储空间方面带来关键的收益,这也会影响索引大小等方面。其次,将JSON存储为文本与将整数存储为文本一样愚蠢。即使没有实际需要,数据清晰度也应该得到强制执行,并且正如您所说,让数据库检查完整性从来都不是一个坏主意。 - Yotam Ofekjson
格式几乎不会有任何损失。但我很好奇,你是否测试过jsonb
占用的空间是否比text
更少。如果text
超过了一定长度(TOAST),它将默认压缩存储。而且INSERT
和SELECT
执行时间会稍微长一些,因为需要对该值进行解析或取消解析。 - Laurenz Albejson
和jsonb
类型更有效地存储对象。但是在这里进行理论讨论是没有意义的。 - Laurenz Albejsonb
甚至json
对于存储具有这种用例的数组更加高效。 - Yotam Ofek