2015-09-04 6 views
7

Ho un modello Utente con un campo di posta elettronica. Ora vorrei renderlo unico, così, come da documentazione, ho bisogno di applicare:Impostazione unique_constraint Ecto

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

Inoltre, vorrei definire l'indice unico in una migrazione:

create unique_index(:users, [:email]) 

Il problema è che quando ho cercato di definire questo in una migrazione mentre l'aggiunta di alcuni più campi non ha funzionato e ora sto cercando di definire solo una migrazione con questo create unique_index(:users, [:email]) ed è la creazione di un errore:

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

che cosa sono io doin g sbagliato?

+0

qual è l'effettiva risposta all'errore di Postgres? quello che hai pubblicato è dalla libreria Postgrex – emaillenin

risposta

11

Ciò può accadere quando il vincolo univoco è già stato violato nella tabella.

Si prega di verificare di non avere già indirizzi email duplicati nella tabella utenti.

È possibile eseguire mix do ecto.drop, ecto.create, ecto.migrate per eliminare e ricreare il database e le tabelle.

+0

Grazie. Avrebbe dovuto essere così perché dopo aver eseguito il tuo suggerimento il database è stato pulito e ora funziona. –