gpt4 book ai didi

postgresql - 带有 tsrange 字段的 Ecto 模式

转载 作者:行者123 更新时间:2023-11-29 12:41:58 25 4
gpt4 key购买 nike

我有一个带有 tsrange column 的 Postgres 表,我想将其包含在我的 Ecto 模块的 schema 中。我看到了 Postgrex.Range exists .我试过这个:

schema "clients" do
field :valid_at, Postgrex.Range
...
end

但这给了我这个错误:

** (ArgumentError) invalid or unknown type Postgrex.Range for field :valid_at
lib/ecto/schema.ex:1785: Ecto.Schema.check_type!/3
lib/ecto/schema.ex:1473: Ecto.Schema.__field__/4

有什么建议吗?我正在使用 Phoenix 1.3 和 Ecto master 分支。

最佳答案

我认为您应该为 tsrange 创建一个自定义类型以与 Ecto 一起工作。

defmodule YourApp.TimestampRange do
@behaviour Ecto.Type

def type, do: :tsrange

def cast([lower, upper]) do
{:ok, [lower, upper]}
end

def cast(_), do: :error

def load(%Postgrex.Range{lower: lower, upper: upper}) do
{:ok, [lower, upper]}
end

def dump([lower, upper]) do
{:ok, %Postgrex.Range{lower: lower, upper: upper, upper_inclusive: false}}
end

def dump(_), do: :error
end

关于包含边界结帐 PostgreSQL documentation

然后在您的应用中您可以使用:

schema "clients" do
field :valid_at, YourApp.TimestampRange
...
end

关于postgresql - 带有 tsrange 字段的 Ecto 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com