2012-10-16 15 views
5

w PG:Kłopoty spadnie UNIQUE

zrobiłem tabelę użytkownika, który zawiera unikalne e-maile, ale później zdecydował, że e-maile nie powinien być unikalny. Pchnąłem zmiany, aby moje pole e-mail było nieunikalne (korzystam z ORM, więc w rzeczywistości nie mam dokładnego kodu SQL, który miał miejsce), ale PG nadal nie pozwala mi używać duplikatów adresów e-mail.

Sprawdziłem indeks i nie jest on unikatowy, ale istnieje ograniczenie, które powstrzymuje mnie przed posiadaniem zduplikowanych adresów e-mail. Mam jednak problem z rezygnacją z tego ograniczenia. Co ja robię źle?

SQL> ALTER TABLE "users" DROP CONSTRAINT "unique_users_email" 
PGError: ERROR: constraint "unique_users_email" of relation "users" does not exist 

SQL> UPDATE users SET email = '[email protected]' 
PGError: ERROR: duplicate key value violates unique constraint "unique_users_email" 
DETAIL: Key (email)=([email protected]) already exists. 
+0

Być może jest miejsce do zatwierdzenia zmian? Spróbuj też: 'ALTER TABLE "Użytkownicy" wyłączyć CONSTRAINT "unique_users_email";' – jt234

+0

@ jt234 które nie work.'PGError: error: błąd składni na lub w pobliżu "OGRANICZENIA" Linia 1: alter table "users" wyłącza CONSTRAINT "unique_users_email"; 'Moje zmiany wydają się być w porządku, z wyjątkiem tego problemu. – AlexQueue

+0

Co powiesz na WYŁĄCZANIE WSZYSTKIEGO WYZWALANIA? – jt234

Odpowiedz

3

Założę się, że „unique_users_email” jest w rzeczywistości nazwa unikalnej indeksu, a nie przymusu. Spróbuj:

DROP INDEX "unique_users_email";

Najnowsze wersje psql powinien powiedzieć Ci różnicę pomiędzy wyjątkowym i unikalnym indeksem przymusu patrząc na opisie tabeli \d.

+0

Należy określić schemat, jeśli tabela nie jest częścią publicznego schematu: DROP INDEX myschema.unique_users_email; – buddamus