set возвращающие функции не разрешены в CASE, в Postgres 10.6 - PullRequest
0 голосов
/ 05 мая 2020

sql не моя сильная сторона

обновление с postgres 9,6 до 10,6, и я получаю сообщение об ошибке из этого запроса:

SELECT id, (CASE WHEN jsonb_typeof(content->'user')='array' THEN jsonb_array_elements(content -> 'user')
         ELSE content::jsonb->'user' END) As att FROM event;

ошибка: set returning functions are not allowed in CASE

результат, который я получаю (начиная с версии 9.6):

id, att
1, {"name": "Andrew"},
2, {"name": "Stacey"},
3, null

элемент 'user' также может иметь значение null.

Так может выглядеть столбец 'content' (любой из двух)

{"user": [{"name": "Andrew", "country_code": "GBR"}]]
{"user": null}

на этом какое-то время застряли любые просьбы о помощи

1 Ответ

1 голос
/ 05 мая 2020

Думаю, вы могли бы использовать

SELECT id, att
FROM event,
jsonb_array_elements(CASE WHEN jsonb_typeof(content->'user')='array'
  THEN content -> 'user'
  ELSE jsonb_build_array(content->'user')
END) AS user(att);
...