How do you create a unique index on two columns in Ecto, which would correspond to this:
CREATE TABLE someTable ( col1 int NOT NULL, col2 int NOT NULL, primary key (col1, col2) )
?
UNIQUE key does not allow duplicate values. UNIQUE key allows NULL values but does not allow NULL values multiple times. We can create multiple UNIQUE columns on one table however only one PRIMARY KEY for table. Defining primary key on a column has a UNIQUE constraint property by default.
To select distinct combinations from two columns, you can use CASE statement. Let us create a table with some columns.
Yes, you can define UNIQUE constraints to columns other than the primary key in order to ensure the data is unique between rows.
A Little follow up on Patrick's answer
Using only create unique_index on your model will ultimately throw an exception instead of giving you an error.
To get an error add a constraint on your changeset but as a paremeter you can give the index name created by unique_index.
So in your migration file :
create unique_index(:your_table, [:col1, :col2], name: :your_index_name)
Then in your changeset :
def changeset(model, param \\ :empty) do model |> cast(params, @required_fields, @optional_fields) |> unique_constraint(:name_your_constraint, name: :your_index_name) end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With