Настройка unique_constraint Ecto

У меня есть модель пользователя с полем электронной почты. Теперь я хотел бы сделать его уникальным, поэтому, согласно документации, мне нужно применить:

cast(user, params, ~w(email), ~w())
|> unique_constraint(:email)

Кроме того, я должен определить уникальный индекс в миграции:

create unique_index(:users, [:email])

Проблема в том, что когда я пытался определить это в миграции, добавляя еще несколько полей, это не сработало, и теперь я пытаюсь просто определить миграцию с этим create unique_index(:users, [:email]), и это создает ошибку:

[info]  create index users_email_index
** (Postgrex.Error) ERROR (unique_violation): could not create unique index "users_email_index"

Что я делаю не так?


person Paulo Janeiro    schedule 04.09.2015    source источник
comment
каков фактический ответ об ошибке от Postgres? тот, который вы опубликовали, взят из библиотеки postgrex   -  person Lenin Raj Rajasekaran    schedule 04.09.2015


Ответы (1)


Это может произойти, когда уникальное ограничение уже нарушено в вашей таблице.

Пожалуйста, убедитесь, что у вас нет дубликатов адресов электронной почты в вашей таблице пользователей.

Вы можете запустить mix do ecto.drop, ecto.create, ecto.migrate для удаления и воссоздания базы данных и таблиц.

person Gazler    schedule 04.09.2015
comment
Спасибо. Так и должно было быть, потому что после выполнения вашего предложения база данных была очищена и теперь работает. - person Paulo Janeiro; 04.09.2015