Ecto me tira el siguiente error:
** (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¿Entiendo correctamente que el nombre real de la restricción en postgresql determina si la función unique_constraint/3 tiene éxito o no? Solo como referencia, en postgreSQL la restricción se define de la siguiente manera:
Indexes: "res_users_pkey" PRIMARY KEY, btree (id) "res_users_login_key" UNIQUE CONSTRAINT, btree (login) entonces _key y no _index .
Llamo a la función de restricción de la siguiente manera:
changeset |> unique_constraint(:login)Entonces, ¿cómo hago que esto funcione?
El nombre de restricción utilizado por Ecto cuando no se proporciona uno es #{table_name}_#{field}_index . Su tabla probablemente se llame res_users y el campo sea login , razón por la cual Ecto usa el nombre de restricción res_users_login_index , que es incorrecto en su caso. Deberá especificar explícitamente el nombre res_users_login_key en la llamada a unique_constraint :
|> unique_constraint(:login, [name: :res_users_login_key])