Problem:
Du vill veta standardnamnen på begränsningar i en tabell i PostgreSQL.
Exempel:
I vår databas skapar vi två tabeller, country
och student
, med följande begränsningar:PRIMARY KEY
(kolumnen id
i tabellerna country
och student
), FOREIGN KEY
(kolumnen country_id
i tabellen student
), DEFAULT
(kolumnen name
i tabellen student
), UNIQUE
(kolumnen name
i tabellen country
och kolumnen personal_number
i tabellen student
), och CHECK
(kolumnen age
i tabellen student
).
Lösning:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Låt oss visa hur PostgreSQL namnger begränsningarna för dessa tabeller som standard. Använd den här frågan för att se dem:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Här är resultatet:
conname | contype |
---|---|
country_pkey | p |
country_name_key | u |
student_age_check | c |
student_pkey | p |
student_personlig_nummernyckel | u |
student_country_id_fkey | f |
Diskussion:
När vi skapar våra tabeller sätter vi begränsningar för vissa kolumner. Vi anger dock inte namnen för dessa begränsningar, så de namnges som standard i PostgreSQL. Hur genereras standardnamnen för begränsningar?
I PostgreSQL är standardtyperna p
, f
, u
och c
.
PRIMARY KEY
namnges som standard med tabellnamnet, ett understreck ('_
’), och ‘pkey
’. I vår resultattabell ovan kan du se två PRIMARY KEY
namn (skriv 'p
’) – en med namnet country_pkey
i country
tabell och en annan med namnet student_pkey
i student
bord.
En FOREIGN KEY
indikeras av begränsningstypen 'f
’. Dess namn genereras av namnet på den aktuella tabellen, ett understreck ('_
’), kolumnnamnet, ett annat understreck (‘_
’), och ‘fkey
’. I vårt exempel är namnet på den främmande nyckelbegränsningen student_country_id_fkey
, eftersom kolumnen country_id
i tabellen student
är en främmande nyckel.
Standardnamnet för en CHECK
begränsning liknar den för en främmande nyckel, bara att den är av begränsningstypen 'c
’. I vårt exempel är kolumnen age
i tabellen student
har denna begränsning, så standardnamnet på begränsningen är student_age_check
.
Standardnamnet för en UNIQUE
begränsning (skriv 'u
’) är tabellnamnet, ett understreck (‘_
’), kolumnnamnet, ett annat understreck (‘_
’), och ‘key
’. I vårt exempel, tabellen student
har en UNIQUE
begränsning med namnet student_personal_number_key
. För flera kolumner i en begränsning följer namnet en liknande konvention men innehåller namnen på alla kolumner i definitionen av begränsningen.