wmnnd
Ecto unique_constraint for primary key
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.
Marked As Solved
josevalim
PRIMARY is the name of the constraint Postgres gives to primary keys. By default we inflect a name based on a unique index, so you need to be explicitly in the case of primary key matches.







