Ecto向我提出以下错误:
** (exit) an exception was raised:
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* unique: res_users_login_key
If you would like to convert this constraint into an error, please
call unique_constraint/3 in your changeset and define the proper
constraint name. The changeset defined the following constraints:
* unique: res_users_login_index
我是否正确理解postgresql中约束的实际名称确定unique_constraint / 3函数是否成功?仅供参考,在postgreSQL中,约束定义如下:
Indexes:
"res_users_pkey" PRIMARY KEY, btree (id)
"res_users_login_key" UNIQUE CONSTRAINT, btree (login)
所以_key
而非_index
。
我按如下方式调用约束函数:
changeset |> unique_constraint(:login)
那么,我该如何做到这一点?
答案 0 :(得分:3)
Ecto在未给出时使用的约束名称为{ echo "${foo:?"parameter is empty"}"; } 2>ls-error.txt
。您的表可能名为#{table_name}_#{field}_index
,字段为res_users
,这就是Ecto使用约束名login
的原因,这在您的情况下是不正确的。您需要在res_users_login_index
的调用中明确指定名称res_users_login_key
:
unique_constraint