Структура таблицы My Postgres:
id | stuff
--------+------------------------------------------------------------
123 | {"type1": {"ref": "ref_1", "...": "..."}, "type2": {"ref": "ref_1", "...": "..."}}
Я бы хотел запросить ref
в каждом типе материала, у меня есть рабочий SQL-запрос для этого:
SELECT * FROM "stuff" AS c0 CROSS JOIN jsonb_each(c0."stuff") AS f1 WHERE value->>'ref' = 'ref_1';
Но используя этот экто-запрос:
(from c in Stuff,
join: fragment("jsonb_each(?)", c.stuff),
where: fragment("value->>'ref' = ?", ^ref)
)
|> Repo.all
Я получаю синтаксическую ошибку Postgres в операторе CROSS JOIN:
** (Postgrex.Error) ERROR 42601 (syntax_error): syntax error at or near ")"
Проверка сгенерированного запроса:
[debug] QUERY ERROR source="stuff" db=0.3ms
SELECT ... FROM "stuff" AS c0 CROSS JOIN (jsonb_each(c0."stuff")) AS f1 WHERE (value->>'ref' = $1) ["ref_1"]
Вышеописанное работает, когда я убираю внешние скобки вокруг (jsonb_each(c0."stuff"))
.
Есть ли способ, чтобы фрагмент генерировал запрос без этих скобок, или мне нужно изменить дизайн запроса?
Спасибо