Postgresql 为什么独特的约束在外太空不起作用?

Postgresql 为什么独特的约束在外太空不起作用?,postgresql,elixir,phoenix-framework,ecto,Postgresql,Elixir,Phoenix Framework,Ecto,我的用户模型中包含以下内容: def changeset(user, attrs) do user |> cast(attrs, [:login, :email]) |> validate_required([:login, :email]) |> unique_constraint(:login) |> unique_constraint(:email) end 但是,仅以这种方式设置唯一的合同是不起作用的。在测试控制器

我的用户模型中包含以下内容:

  def changeset(user, attrs) do
    user
    |> cast(attrs, [:login, :email])
    |> validate_required([:login, :email])
    |> unique_constraint(:login)
    |> unique_constraint(:email)
  end
但是,仅以这种方式设置唯一的合同是不起作用的。在测试控制器时,我仍然会收到重复的登录名和电子邮件

我实现了这一点,但我必须在模型模式中将
:unique
关键字参数设置为
true
,并在迁移中为每列创建一个唯一索引

除了PostgreSQL唯一索引外,Ecto是否没有检查约束本身?向
变更集/2
功能添加
唯一约束
有什么意义吗

唯一约束的工作原理是依靠数据库检查是否违反了唯一约束,如果违反,则
exto
将其转换为变更集错误。 -

这就是说,
unique_constraint/3
之所以存在,是为了统一错误(将从数据库接收到的更改集错误排除在外),这显然简化并标准化了错误处理

exto
显然无法在不依赖DB的情况下自行检查约束

唯一约束的工作原理是依靠数据库检查是否违反了唯一约束,如果违反,则
exto
将其转换为变更集错误。 -

这就是说,
unique_constraint/3
之所以存在,是为了统一错误(将从数据库接收到的更改集错误排除在外),这显然简化并标准化了错误处理


exto
显然无法在不依赖DB的情况下自行检查约束。

exto显然无法在不依赖DB的情况下自行检查约束。RubyonRails做选择只是为了检查唯一的验证,而不是依赖于DB服务器错误。我不确定我是否遵循了。您是否希望RoR在本地下载10TB数据库以验证本地值的唯一性?在RubyonRails中,当你设置一个惟一约束时,它会触发一个SQL选择来检查惟一约束本身。Ecto不提供此功能。不需要下载数据。select只是一个计数()。实际上我更喜欢Ecto way=)如果不依赖DB,Ecto显然无法自行检查约束。RubyonRails做选择只是为了检查唯一的验证,而不是依赖于DB服务器错误。我不确定我是否遵循了。您是否希望RoR在本地下载10TB数据库以验证本地值的唯一性?在RubyonRails中,当你设置一个惟一约束时,它会触发一个SQL选择来检查惟一约束本身。Ecto不提供此功能。不需要下载数据。选择只是一个计数()。实际上我更喜欢Ecto方式=)