只要这些集合返回函数中没有一个返回多行,就可以将它们放入子查询中以绕过限制:
SELECT
CASE
WHEN type = 'a' THEN data #>> '{key_a,0}'
WHEN type = 'b' THEN data #>> '{key_a,0,key_b,0}'
WHEN type = 'c' THEN (SELECT jsonb_object_keys(data #> '{key_c,key_d}'))
ELSE NULL
END AS foo,
CASE
WHEN type = 'a' THEN (SELECT jsonb_array_elements_text(data -> 'key_e'))
WHEN type = 'b' THEN data #>> '{key_f,0,key_g}'
ELSE NULL
END AS bar