尝试使用 Ecto 在 Elixir 中执行查询时出错

Error trying to execute query in Elixir with Ecto

我有一个 Elixir 应用程序,它使用 Ecto 在 Postgres 中执行查询。 我有这个 Ecto 模式:

defmodule Person do

  use Ecto.Schema

  schema "person" do
    field :name, :string
  end

end

我正在尝试在 Elixir 中制作一个简单的 select:

query = from Person
result = Repo.all(query)

但是在执行该代码后,我看到了这个:

** (FunctionClauseError) no function clause matching in Ecto.Adapters.Postgres.Connection.expr/3

The following arguments were given to Ecto.Adapters.Postgres.Connection.expr/3:

    # 1
    {{:., [], [{:&, [], [0]}, "name"]}, [], []}

    # 2
    {{[34, "Person", 34], [84 | "0"],
      Person}, []}

    # 3
    #Ecto.Query<from c0 in Person,
     select: c0>

Attempted function clauses (showing 10 out of 33):

    defp expr(-{:^, [], [ix]}-, _sources, _query)
    defp expr(-{{:., _, [{:parent_as, _, [as]}, field]}, _, []}-, _sources, query) when -is_atom(field)-
    defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query) when -is_atom(field)-
    defp expr(-{:&, _, [idx]}-, sources, _query)
    defp expr(-{:in, _, [_left, []]}-, _sources, _query)
    defp expr(-{:in, _, [left, right]}-, sources, query) when -is_list(right)-
    defp expr(-{:in, _, [left, {:^, _, [ix, _]}]}-, sources, query)
    defp expr(-{:in, _, [left, %Ecto.SubQuery{} = subquery]}-, sources, query)
    defp expr(-{:in, _, [left, right]}-, sources, query)
    defp expr(-{:is_nil, _, [arg]}-, sources, query)
    ...
    (23 clauses not shown)

(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:590: Ecto.Adapters.Postgres.Connection.expr/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:1284: Ecto.Adapters.Postgres.Connection.intersperse_map/4
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:340: Ecto.Adapters.Postgres.Connection.select/3
(ecto_sql 3.7.2) lib/ecto/adapters/postgres/connection.ex:113: Ecto.Adapters.Postgres.Connection.all/2
(ecto_sql 3.7.2) lib/ecto/adapters/postgres.ex:102: Ecto.Adapters.Postgres.prepare/2
(ecto 3.7.2) lib/ecto/query/planner.ex:180: Ecto.Query.Planner.query_without_cache/4
(ecto 3.7.2) lib/ecto/query/planner.ex:150: Ecto.Query.Planner.query_prepare/6
(ecto 3.7.2) lib/ecto/query/planner.ex:125: Ecto.Query.Planner.query_with_cache/7

与 Repo.all 的结果相同。

这是我使用的版本: 长生不老药:1.13 ecto_sql:3.7.2 postgrex: 0.16.2

有谁知道是什么导致了这个错误?

谢谢

终于找到问题所在了: 我在 Postgres 数据库中有一个 table,它包含两个字段: person_age_123 和 person_name_123.

所以在我的 Elixir 架构上,我试图将这些数据库列名称映射到更“友好”的字段名称,例如 agename.

所以我的 Elixir 架构如下:

defmodule EctoApp.Person do

  use Ecto.Schema

  schema "person" do
    field :name, :string, [source: "person_name_123"]
    field :age, :integer, [source: "person_age_123"]
  end

end

错误是因为我使用的是 " 而不是 :,所以我认为这个想法是包含原子而不是字符串。

无论如何,我认为 Elixir 可以显示更友好的消息错误,因为我在尝试了很多东西后才发现问题。