我想用json_array_elements扩展json数组。但它的工作原理如此糟糕。请参阅下文。
选择json_array_elements('[1,2]')作为a,json_array_elements('[2,3,4]')为b;
a | b
---+---
1 | 2
2 | 3
1 | 4
2 | 2
1 | 3
2 | 4
(6行)
选择json_array_elements('[1,2]')作为a,json_array_elements('[2,3]')为b;
a | b
---+---
1 | 2
2 | 3
(2行)
似乎当数组的长度相等时,出现问题。 任何人都可以告诉我,为什么会这样。
答案 0 :(得分:1)
PostgreSQL重复每个列表,直到两个列表同时发生。
换句话说,结果列表的长度是输入列表长度的least common multiple。
这种行为确实很奇怪,并且会在PostgreSQL v10中更改:
select json_array_elements('[1, 2]') as a, json_array_elements('[2, 3, 4]') as b;
a | b
---+---
1 | 2
2 | 3
| 4
(3 rows)
将SRF评估移动到ProjectSet可以保留旧的 当多个SRF存在于一个SRF中时,“最不常见的多重”行为 targetlist(即继续返回行,直到所有SRF都在结尾处 他们同时输入),我们决定只返回行直到 所有SRF都已耗尽,已经用尽的SRF返回NULL。我们 认为以前的行为过于混乱,出乎意料并且实际上 不是特别有用。