Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:对JSONB数据进行分页_Postgresql - Fatal编程技术网

PostgreSQL:对JSONB数据进行分页

PostgreSQL:对JSONB数据进行分页,postgresql,Postgresql,这可能需要很长时间,但有没有办法用查询限制JSONB数据 我们正在调查MongoDB和PostgreSQL JSONB之间的差异,这可能是一个关键因素。我使用JSONB和IMO使用了MongoDB和PostgreSQL,PostgreSQL赢得90%的时间 这是因为现实生活中的大多数数据本质上都是关系型的,PostgreSQL为您提供了这两个方面的最佳选择。它是一个功能强大的关系数据库,但在需要时也具有JSONB的灵活性,例如JSON非常适合非结构化数据 它的缺点在于规模巨大-MongoDB可以

这可能需要很长时间,但有没有办法用查询限制JSONB数据


我们正在调查MongoDB和PostgreSQL JSONB之间的差异,这可能是一个关键因素。

我使用JSONB和IMO使用了MongoDB和PostgreSQL,PostgreSQL赢得90%的时间

这是因为现实生活中的大多数数据本质上都是关系型的,PostgreSQL为您提供了这两个方面的最佳选择。它是一个功能强大的关系数据库,但在需要时也具有JSONB的灵活性,例如JSON非常适合非结构化数据

它的缺点在于规模巨大-MongoDB可以获胜,例如,当有大量原始JSON数据或数据可以轻松转换为JSON时,没有/有限的关系

PostgreSQL JSONB的强大功能最好用一个例子来说明:-

让我们创建一个表t,如下所示:-

创建表t id串行主键, 数据jsonb; 。。。用一些演示数据

在t id中插入数据 值1,'[{name:A,age:20}, {姓名:B,年龄:21}, {姓名:C,年龄:22}, {姓名:D,年龄:23}, {姓名:E,年龄:24}, {姓名:F,年龄:25}, {姓名:G,年龄:26}]', 2,“[{姓名:H,年龄:27}, {姓名:I,年龄:28}, {姓名:J,年龄:29}, {姓名:K,年龄:30}, {姓名:L,年龄:31}]', 3,“[{姓名:M,年龄:32}, {姓名:N,年龄:33}, {姓名:O,年龄:34}, {姓名:P,年龄:35}, {姓名:Q,年龄:36}]; 1.简单选择 如果我们简单地从t中选择all,那么在数据列中会有3行带有JSONB数组

选择* 从t; --+-------------------------------------------------------------------------------------------- id |数据 --+-------------------------------------------------------------------------------------------- [年龄:20,姓名:A},{年龄:21,姓名:B},{年龄:22,姓名:C},{年龄:23,姓名:D},{年龄:24,姓名:E},{年龄:25,姓名:F},{年龄:26,姓名:G}] 2 |[{年龄:27,姓名:H},{年龄:28,姓名:I},{年龄:29,姓名:J},{年龄:30,姓名:K},{年龄:31,姓名:L}] 3 |[{年龄:32,姓名:M},{年龄:33,姓名:N},{年龄:34,姓名:O},{年龄:35,姓名:P},{年龄:36,姓名:Q}] ----------------------------------------------------------------------------------------------- 2.选择+unest 然后,我们可以使用JSONB_array_elements函数在数据列中取消JSONB数组的嵌套-这将返回17行id和数据JSONB对象

选择id, jsonb_数组_元素数据 从t; --+------------- id |数据 --+------------- 1{年龄:20岁,姓名:A} 1{年龄:21岁,姓名:B} 1{年龄:22岁,姓名:C} 1{年龄:23岁,姓名:D} 1{年龄:24岁,姓名:E} 1{年龄:25岁,姓名:F} 1{年龄:26岁,姓名:G} 2{年龄:27岁,姓名:H} 2{年龄:28岁,姓名:I} 2{年龄:29岁,姓名:J} 2{年龄:30岁,姓名:K} 2{年龄:31岁,姓名:L} 3{年龄:32岁,姓名:M} 3{年龄:33岁,姓名:N} 3 |{年龄:34岁,姓名:O} 3{年龄:35岁,姓名:P} 3{年龄:36岁,姓名:Q} ---------------- 3.选择+unest+Pagination 然后,我们可以对上面的前一个非嵌套查询进行分页:-

选择id, jsonb_数组_元素数据 从t 限制5;-返回第一个5 --+-------------- id |数据 --+-------------- 1{年龄:20岁,姓名:A} 1{年龄:21岁,姓名:B} 1{年龄:22岁,姓名:C} 1{年龄:23岁,姓名:D} 1{年龄:24岁,姓名:E} ---------------- 选择id, jsonb_数组_元素数据 从t 限制5偏移量5;-下一个5点回来 --+-------------- id |数据 --+-------------- 1{年龄:25岁,姓名:F} 1{年龄:26岁,姓名:G} 2{年龄:27岁,姓名:H} 2{年龄:28岁,姓名:I} 2{年龄:29岁,姓名:J} ---------------- 4.选择+取消嵌套+分页+重新嵌套 我们可以更进一步,再次按id分组,并使用jsonb_agg函数将JSON放回数组中:-

不被视为 选择id, jsonb_数组_元素数据作为数据 从t 限制5偏移量5 选择id,jsonb_agg数据 从t_unested 按id分组; --+---------------------------------------- id |数据 --+---------------------------------------- 1 |[{年龄:25岁,姓名:F},{年龄:26岁,姓名:G}] 2 |[{年龄:27岁,姓名:H},{年龄:28岁,姓名:I},{年龄:29岁,姓名:J}] --+---------------------------------------- 5.选择+取消嵌套+分页+重新嵌套+自定义对象 我们可以接受上一个查询,并使用新字段重新构造一个新对象,例如person\u id和person\u info。这 将返回一列,其中包含一个新的自定义JSONB对象,每个id返回一行

不被视为 选择id, jsonb_数组_元素数据作为数据 从t 限制5偏移量5 , 作为 选择jsonb_构建_对象 “个人id”,id, “个人信息”,jsonb_agg数据 体育