Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a unique constraint on two columns together in Ecto

Tags:

elixir

ecto

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) ) 

?

like image 442
2083 Avatar asked Apr 05 '16 05:04

2083


People also ask

Can unique key created on multiple columns?

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.

How do you make a unique two column combination in SQL?

To select distinct combinations from two columns, you can use CASE statement. Let us create a table with some columns.

Can a table have multiple unique columns?

Yes, you can define UNIQUE constraints to columns other than the primary key in order to ensure the data is unique between rows.


1 Answers

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 
like image 127
TheSquad Avatar answered Nov 07 '22 14:11

TheSquad