У меня есть схема Ecto с embeds_many, определенным так:
schema "rounds" do
embeds_many :growth_cycles, SomeModule.GrowthCycle, on_replace: :delete
end
Это переводит в поле jsonb в PostgreSQL. Значением по умолчанию является пустой массив - []. Я хотел бы написать Ecto-запрос, который возвращает только раунды, которые имеют growth_cycles = [] (рост_циклов не задан / пуст).
Самое простое, что я попробовал, было:
from(r in Round, where: r.growth_cycles == [])
Но это дает следующую ошибку:
** (Postgrex.Error) ERROR 42P18 (indeterminate_datatype) cannot determine type of empty array
...
hint: Explicitly cast to the desired type, for example ARRAY[]::integer[].
Я также пробовал:
from(r in Round, where: length(r.growth_cycles) == 0)
Но это выдает ошибку, говорящую, что длина не является допустимым выражением запроса.
Я вижу ссылки на использование фрагментов для перехода к необработанному PostgreSQL, но я не уверен, как это сделать.