在一条SELECT
语句中 Select 多个包含jsonb_array_elements的列是否安全?是否可以保证一列中展开元素的顺序与第二列中的顺序相同?
Example:我的表包含一个列data
,该列包含一个jsonarray.该数组的每个元素都是一个具有两个属性(id
和name
)的对象:
data
--------------------------------------------------------------------
[{"id": "11", "name": "entry11"}, {"id": "12", "name": "entry12"}]
[{"id": "21", "name": "entry21"}, {"id": "22", "name": "entry22"}]
如果我参选
with my_table(data) as (values
('[{"id": "11", "name":"entry11"},{"id": "12", "name": "entry12"}]'::jsonb),
('[{"id": "21", "name":"entry21"},{"id": "22", "name": "entry22"}]'::jsonb)
)
select
jsonb_array_elements(data)->'id' as id,
jsonb_array_elements(data)->'name' as name
from my_table
;
我得到了预期的结果:
id | name
------+-----------
"11" | "entry11"
"12" | "entry12"
"21" | "entry21"
"22" | "entry22"
My Question:由于jsonb_array_elements
的两个调用由数据库独立处理,是否存在name
entry22最终与id
21排在同一行的风险?我的实验(也是用更大的桌子)表明,它总是有效的.但由于关系数据库通常是don't have a stable ordering of rows个,我想知道我是否可以依赖这个结果.