我有一个表,其中的JSONB字段包含嵌套数组。 我想将这些嵌套JSON数组中的数据分解为多行,同时保留有关每个值在数组结构中的位置的信息。
我有一些查询可以工作到一定程度的嵌套,但是到了Postgres失败的地步,我无法理解[XX000] ERROR: failed to build any 3-way joins
。
有人能指出我在做什么错和/或这个错误是什么意思吗?
为方便起见,以下是重现该问题的所有信息:
一个非常简单的表:
CREATE TABLE random_table (
random_field JSONB
);
一个非常嵌套的JSONB数据:
INSERT INTO public.random_table (random_field) VALUES ('{"bar": [[[1, 2, 3, 4]]], "foo": [[["abc", "def"], ["tuw", "xyz"]]]}');
一个非常复杂的查询:
SELECT *
FROM random_table
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(random_table.random_field -> 'foo')
WITH ORDINALITY AS foo_level_1(foo_1, foo_1_index)
LEFT OUTER JOIN LATERAL (
SELECT *
FROM jsonb_array_elements(foo_1)
WITH ORDINALITY AS foo_level_2(foo_2, foo_2_index)
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(foo_2)
-- WITH ORDINALITY AS foo_level_3(foo_3, foo_3_index)
-- ) AS foo_lateral_2 ON TRUE
) AS foo_lateral_1 ON TRUE
-- FULL OUTER JOIN jsonb_array_elements(random_table.random_field -> 'bar')
-- WITH ORDINALITY AS bar_level_1(bar_1, bar_1_index) ON FALSE
-- LEFT OUTER JOIN LATERAL (
-- SELECT *
-- FROM jsonb_array_elements(bar_1)
-- WITH ORDINALITY AS bar_level_2(bar_2, bar_2_index)
-- ) AS bar_lateral_1 ON TRUE
) AS pouet ON TRUE;
请注意两个注释部分:
[XX000] ERROR: failed to build any 3-way joins
很明显,我希望能够取消注释的两个部分,甚至使FROM子句复杂化。
任何帮助将不胜感激。
答案 0 :(得分:0)
发生此问题是由于a bug在所有PostgreSQL版本released on 9th May 2019中均已解决。
这意味着下面列出的所有版本(并希望以下版本)都可以: