postgresql - JSON 与 TEXT 字段在 Postgres 中保留值列表

标签 postgresql postgresql-json

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

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

JSON 还是文本?

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

最佳答案

无论如何,对于非嵌套结构,我都会使用 JSON。 Postgres 支持运算符获取、比较、删除键/值对或整个对象。另请进一步阅读有关 JSONB 的内容,因为它可能更适合您的用例,尤其是当您计划对 json 值执行数据库操作并且还想索引特定键时。

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

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

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

关于postgresql - JSON 与 TEXT 字段在 Postgres 中保留值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830476/

相关文章:

sql - 带时区的 Postgres 时间戳转换

postgresql - 无法从 Kubernetes 集群外部连接到 postgres

sql - 获取错误 ERROR : date/time field value out of range: "31 APR 2001 in Postgres

json - 从 jsonb 成员更新整数列失败,返回 : column is of type integer but expression is of type jsonb

postgresql - Postgis - ST_within 没有做我想做的事。如何在空心区域中找到一个点?

arrays - 将 JSONB_ARRAY_ELEMENTS 结果分配给 VARCHAR 数组

ruby-on-rails - 在 Postgresql JSON 数据列上区分

python - Django Postgresql JsonField查询相关字典键

arrays - postgres + json 对象到数组

postgresql - 修复对 PostgreSQL 的请求,没有 UNIQUE 规则的异常