在Postgres上保留以下内容的最佳方法是什么?
[{'property':'foo1', 'val': "foo_val"}, {'property': 'foo2', 'val': "foo_val2"}]
JSON还是文本?
据我了解,JSON非常适合嵌套结构(使用->>)。但是在这种情况下,它是一个扁平的结构。将其保留为JSON或TEXT是否仍然有意义。哪个更容易查询?
答案 0 :(得分:1)
无论如何,我都会选择JSON
用于非嵌套结构。 Postgres支持操作员获取,比较,删除键/值对或整个对象。还请进一步阅读JSONB
,因为它可能更适合您的用例,尤其是如果您打算对json值进行数据库操作并且还希望索引特定键时。
当您将json存储为TEXT
时,您不能简单地编写一个查询来匹配键的值,但是您可以使用内置的json operators and functions来做到这一点,您还可以做很多事情用它做。例如,您不能将foo_val2
作为某个键的值来检索,因为字符串没有键值对,所以它都是文本。
我很难理解的是,对于包容符运算符没有优化,例如LIKE
,因此您仍然需要将json解压缩为文本,然后执行搜索-see my question on StackOverflow关于这个主题。
总结,JSON
或JSONB
应该是处理json数据时的首选,因为它可以让您灵活使用TEXT
。尤其是如果您打算在数据库方面进行一些工作,或者发现自己愿意这样做。