Hi there,
I’m trying to capture constraint exceptions when a user attempts to create a database record with a primary key that already exists.
My Ecto struct has its primary key defined like this: @primary_key { :uuid, :binary_id, autogenerate: true }
I tried applying a unique_constraing in my changeset with unique_constraint(changeset, :uuid)
but would still get an exception that said:
** (Ecto.ConstraintError) constraint error when attempting to insert struct:
* unique: PRIMARY
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: %TABLE_NAME_uuid_index
Only after I added name: :PRIMARY
as an additional opts
argument to unique_constraint/3
, everything went fine: unique_constraint(changeset, :uuid, name: :PRIMARY)
Now why is it that I have to specify :PRIMARY
as the name of the constraint? Where does that name come from?
I could not find anything about that in the Ecto docs.