我可以使用新的json字段做什么?


Answers:


7

PostgreSQL 9.2

新功能的好处是双重的。类型的json列会验证其内容的有效性,以便该列中的内容自动为有效的JSON,如果尝试向其写入其他内容,则会出现错误。
您具有基本的功能,可以根据行或数组即时创建有效的JSON-这是一个非常常见的用例。

在pgsql-hackers列表中引用了Andrew Dunstan

在某个阶段可能会有一些json处理(与json生成相反)功能,但在9.2中没有。

我曾在SO上的这个相关问题下使用过该报价。

Postgres 9.3

..最终带来了许多功能和运算符。请查阅手册页以获取JSON函数

SO的相关答案:

@将张贴博客文章。请参阅下面的评论。

PostgreSQL 9.4

确保使用大量新功能签出新jsonb类型

最重要的是,经过分解的二进制存储可以在磁盘上使用较小的存储空间,并且可以使用等号运算符jsonb(与不同json)来进行存储,这使许多其他操作成为可能(例如DISTINCTUNIQUE索引)。

json和都添加了更多功能jsonbjson_to_record()json_to_recordset()等等。发行说明中的​​更多内容。


1
您也可以使用pl / v8js对其进行操作,从而为您提供一些非常棒的功能。
克里斯·特拉弗斯

1
是的,但是如果您使用托管的Postgres实例(例如Heroku),则可能无法选择PLV8(某些情况下不在Heroku上)。在这种情况下,据我所知,JSON数据类型在9.2中的价值非常有限。看起来9.3可能有一些不错的支持。
David S

1
威尔

2

简而言之,JSON数据类型(以及较旧的HSTORE扩展和数据类型)使您可以将PostgreSQL用作“无模式”数据存储(或合并关系和非关系的“无模式”数据),而不是必须诉诸其他NoSQL选项(例如MongoDB)。您甚至可以获得一些MongoDB无法做到的事情,例如过滤索引,表达式索引等。唯一的缺点是PostgreSQL不像MongoDB那样支持现成的分片……但是,我真正质疑分片的真正需要频率。有了配置良好的PostgreSQL 9.3数据库,足够的O / S资源以及一些经过深思熟虑的过滤表达式索引,您应该可以轻松地实现0.25毫秒范围内的无模式行检索。

HTH,Dave Sisk


1

基本上,我在这里看到三个用例:

  1. 将复杂的结果轻松传递回应用程序
  2. 将复杂的数据从应用程序传递到数据库,并且
  3. 存储相对自由格式的数据以供以后处理。

第一个可以直接从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添加它,则可以使用该软件针对单个企业来完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.