Postgres中{J}和JSONB的区别

时间:2016-09-22 11:08:39

标签: json postgresql sqldatatypes jsonb

PosgresSQL中JSON和JSONB数据类型有什么区别?

  1. 何时应该使用特定的?
  2. 与其他人有什么好处或坏处?

2 个答案:

答案 0 :(得分:17)

json基本上是一个blob,它以原始格式存储JSON数据,甚至可以保留诸如空格,对象中键的顺序,甚至是对象中的重复键之类的无关紧要的事物。它确实提供了执行一些基本JSON操作的能力,例如提取与对象中的某个键相关联的值,尽管它很慢,因为它每次都必须解析JSON blob。它还验证每个值以检查它是否是有效的JSON。另一方面,jsonb以自定义格式存储JSON数据,该格式针对某些操作进行了优化,例如提取与对象中某些键相关联的值(即,它不会重新分析JSON,也不会线性搜索)。此外,jsonb支持更多操作,就像对象的串联或在对象内部设置值一样。

一般情况下,只有当我知道我不会执行任何JSON操作或偶尔执行任何操作时,才会使用json。对于所有其他情况,我使用jsonb。请注意,对于前一种情况,text它也是一个非常有效的选项,特别是如果您对json的验证不感兴趣(例如,因为您信任数据源)。

答案 1 :(得分:8)

这是解释: https://www.citusdata.com/blog/2016/07/14/choosing-nosql-hstore-json-jsonb/

  

在大多数情况下,JSONB可能是您在寻找NoSQL时所需要的,   无架构,数据类型。 Hstore和JSON也可以有自己的位置   但它不太常见。更广泛地说,JSONB并不总是适合每一个   数据模型。在哪里可以正常化,有益处,但如果你这样做   具有包含大量可选列的模式(例如   使用事件数据)或架构根据租户ID然后JSONB而不同   可以很合适。一般来说,你想要:

JSONB - In most cases
JSON - If you’re just processing logs, don’t often need to query, and use as more of an audit trail
hstore - Can work fine for text based key-value looks, but in general JSONB can still work great here