Podczas tworzenia tabeli w PostgreSQL, domyślne nazwy ograniczeń zostaną przypisane, jeśli nie zostaną podane:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
Ale użycie ALTER TABLE
do dodania ograniczenia wydaje się, że nazwa jest obowiązkowa:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
Spowodowało to pewne niespójności w nazewnictwie projektów, nad którymi pracowałem, i powoduje pojawienie się następujących pytań:
Czy istnieje prosty sposób na dodanie ograniczenia do istniejącej tabeli o nazwie, którą otrzymałoby, gdyby zostało dodane podczas tworzenia tabeli?
Jeśli nie, czy należy całkowicie unikać nazw domyślnych, aby zapobiec niespójnościom?
postgresql
naming-conventions
constraints
Ian Mackinnon
źródło
źródło
Odpowiedzi:
Instrukcja jest całkiem jasne, o tym ( „ tableconstraint: Ta forma dodaje nowy ograniczenie do tabeli przy użyciu tej samej składni jak CREATE TABLE. ”)
Możesz więc po prostu uruchomić:
źródło
CONSTRAINT
polubienieALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);
i otrzymałem błędy. Dziękuję Ci!Standardowe nazwy indeksów w PostgreSQL to:
{tablename}_{columnname(s)}_{suffix}
gdzie przyrostek jest jednym z następujących:
pkey
dla ograniczenia klucza podstawowegokey
unikalne ograniczenieexcl
dla ograniczenia wykluczającegoidx
dla dowolnego innego rodzaju indeksufkey
dla klucza obcegocheck
dla ograniczenia SprawdźStandardowym sufiksem dla sekwencji jest
seq
dla wszystkich sekwencjiDowód twojego UNIKALNEGO ograniczenia:
źródło
fkey
a ograniczenia dotyczące kluczy obcych w wielu kolumnach wydają się obejmować tylko nazwę pierwszej kolumny.CREATE TABLE mytable (mycolumn numeric UNIQUE);