I have such a PostgreSQL table
x
id data(jsonb)
-- ------------------------------------
23 {"val": [30, 5, 1]}
41 {"val": [11, 4, 99]}
99 {"val": [2]}
Now I would like to get all sorted val and have the limitation for each query (for pagination). For example 1st query
val
-----
1
2
4
5
11
2nd query
val
-----
30
99
Advertisement
Answer
You need to unnest the array, sort the result then apply offset and limit:
select v.value::int
from the_table t
cross join jsonb_array_elements_text(t.data -> 'val') as v(value)
order by v.value::int
offset 0 --<< start of page
limit 5 --<< page size
;
Instead of limit 5
you can also use the standard compliant fetch first 5 rows only