如何使用 PostgreSQL 在 Ecto 中使用点列类型

How to use point column type in Ecto using PostgreSQL

我可以看到 Postgrex 库支持 postgreSQL 的 point 类型,但我不知道如何在模型中使用它。我可以在迁移中为列指定 point 类型,但是当我在模型中这样指定它时:

schema "something" do
  field :position, :point
end

我得到 ** (ArgumentError) invalid or unknown type :point for field :position。我应该做些什么才能让它发挥作用?

Ecto 不包含 PostgreSQL 中 point 数据类型的任何 Ecto.Type 实现模块。您可以使用 Ecto.Type 行为定义自己的模块,也可以使用像 geo which includes Geo.Point which implements the Ecto.Type behavior.

这样的库

使用 geo,您的架构将类似于:

schema "something" do
  field :position, Geo.Point
end

geo 库已将所有与 Ecto 相关的代码移至单独的库 (see related pull request here)

要使用 PostgreSQL point 数据类型的 Ecto.Type 实现,请使用 geo_postgis 库。