У меня есть требование upsert, поэтому мне нужно вызвать хранимую процедуру postgres или использовать общее табличное выражение. Я также использую pgcrypto exgtension для паролей и хотел бы использовать функции postgres (такие как "crypt" для кодирования/декодирования паролей).
Но я не могу найти способ заставить Ecto играть с сырым sql в части или целом, предполагается ли это, что ecto будет поддерживать только elixir dsl и не разрешать обходить исходный sql, когда dsl недостаточно?
Я обнаружил, что могу запросить через адаптер (Rocket - это имя приложения)
q = Ecto.Adapters.Postgres.query(Rocket.Repo,"select * from users limit 1",[])
Но не уверен, как это сделать с моделью. Я новичок в эликсире, и мне кажется, что я должен использовать Ecto.Model.Schem. схема/3, но это не удается
Rocket.User.__schema__(:load,q.rows |> List.first,0)
** (FunctionClauseError) no function clause matching in Rocket.User.__schema__/3