JSON vs TEXT 字段以在 Postgres 中保留值列表

JSON vs TEXT field to keep a list of values in Postgres

在 Postgres 上保留以下内容的最佳方法是什么?

[{'property':'foo1', 'val': "foo_val"}, {'property': 'foo2', 'val': "foo_val2"}]

JSON 或文本?

据我了解,JSON 适用于嵌套结构(使用 ->>)。但在这种情况下,它是一个平面结构。将其保留为 JSON 或 TEXT 是否仍然有意义。哪个更容易查询?

对于非嵌套结构,我会选择 JSON。 Postgres 支持运算符获取、比较、删除 key/value 对或整个对象。另请进一步阅读 JSONB,因为它可能更适合您的用例,特别是如果您计划对 json 值执行数据库操作并且还想索引特定键。

当您将 json 存储为 TEXT 时,您不能简单地编写查询来匹配键的值,但您可以使用内置的 json [=18] 来做到这一点=],您还可以用它做更多的事情。例如,您无法检索 foo_val2 作为某个键的值,因为字符串没有键值对,它全是文本。

我从惨痛的教训中了解到,没有针对包含运算符的优化,例如 LIKE,因此您仍然需要将 json 解压为文本,然后执行搜索 - see my question on Whosebug 关于这个话题。

总结JSONJSONB 应该是您处理 json 数据时的首选,因为它可以让您拥有灵活性' 有 TEXT。特别是如果您计划在数据库方面做一些工作,或者如果您发现自己愿意这样做。