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.