Answers:
新功能的好处是双重的。类型的json
列会验证其内容的有效性,以便该列中的内容自动为有效的JSON,如果尝试向其写入其他内容,则会出现错误。
您具有基本的功能,可以根据行或数组即时创建有效的JSON-这是一个非常常见的用例。
我在pgsql-hackers列表中引用了Andrew Dunstan:
在某个阶段可能会有一些json处理(与json生成相反)功能,但在9.2中没有。
..最终带来了许多功能和运算符。请查阅手册页以获取JSON函数。
SO的相关答案:
@将张贴博客文章。请参阅下面的评论。
确保使用大量新功能签出新jsonb
类型。
最重要的是,经过分解的二进制存储可以在磁盘上使用较小的存储空间,并且可以使用等号运算符jsonb
(与不同json
)来进行存储,这使许多其他操作成为可能(例如DISTINCT
或UNIQUE
索引)。
为json
和都添加了更多功能jsonb
。json_to_record()
,json_to_recordset()
等等。发行说明中的更多内容。
简而言之,JSON数据类型(以及较旧的HSTORE扩展和数据类型)使您可以将PostgreSQL用作“无模式”数据存储(或合并关系和非关系的“无模式”数据),而不是必须诉诸其他NoSQL选项(例如MongoDB)。您甚至可以获得一些MongoDB无法做到的事情,例如过滤索引,表达式索引等。唯一的缺点是PostgreSQL不像MongoDB那样支持现成的分片……但是,我真正质疑分片的真正需要频率。有了配置良好的PostgreSQL 9.3数据库,足够的O / S资源以及一些经过深思熟虑的过滤表达式索引,您应该可以轻松地实现0.25毫秒范围内的无模式行检索。
HTH,Dave Sisk
基本上,我在这里看到三个用例:
第一个可以直接从PostgreSQL完成,不需要任何插件。您应该能够执行以下操作:
SELECT row_to_json(mt.id, mt.testval, array_agg(mt2))
FROM my_table mt
JOIN my_table2 mt2 ON mt.id = mt2.mt_id
WHERE mt.id = 123;
然后可以使用它在您的输出中创建嵌套数组等,并避免在应用程序端出现很多混乱的解析问题。
第二种是将复杂数据传递到db中进行处理。当前没有内置函数可以简化此操作,但是使用pl / v8js之类的插件,您可以使用Javascript编程数据库,并使用json作为交换格式。这可以允许在数据库内部创建更丰富的接口。请注意,由于可以为函数输出建立索引,因此可以使用它来创建要存储在数据库中的JSON方面的索引。
第三是我们计划在LedgerSMB中使用它的领域。这个想法是,我们可能希望允许系统集成商将非常简单的信息与客户帐户一起存储。然后可以将其打包在要存储的JSON字段中。不能由主应用程序直接查询,但是如果人们想使用pl / v8js添加它,则可以使用该软件针对单个企业来完成。