Problém:
Chcete znát výchozí názvy omezení v tabulce v PostgreSQL.
Příklad:
V naší databázi vytvoříme dvě tabulky, country
a student
, s následujícími omezeními:PRIMARY KEY
(sloupec id
v tabulkách country
a student
), FOREIGN KEY
(sloupec country_id
v tabulce student
), DEFAULT
(sloupec name
v tabulce student
), UNIQUE
(sloupec name
v tabulce country
a sloupec personal_number
v tabulce student
) a CHECK
(sloupec age
v tabulce student
).
Řešení:
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) );
Ukážeme si, jak PostgreSQL standardně pojmenovává omezení těchto tabulek. Chcete-li je zobrazit, použijte tento dotaz:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Zde je výsledek:
conname | contype |
---|---|
country_pkey | p |
country_name_key | u |
student_age_check | c |
student_pkey | p |
student_personal_number_key | u |
student_country_id_fkey | f |
Diskuse:
Když vytváříme naše tabulky, nastavujeme omezení pro některé sloupce. Názvy těchto omezení však neuvádíme, takže jsou v PostgreSQL pojmenovány standardně. Jak se generují výchozí názvy pro omezení?
V PostgreSQL jsou výchozí typy omezení p
, f
, u
a c
.
PRIMARY KEY
je ve výchozím nastavení pojmenován názvem tabulky, podtržítkem („_
“) a „pkey
'. V naší výsledkové tabulce výše můžete vidět dva PRIMARY KEY
jména (zadejte ‘p
’) – jeden pod názvem country_pkey
v country
tabulka a další pod názvem student_pkey
v student
tabulka.
FOREIGN KEY
je označeno typem omezení ‘f
'. Jeho název je generován názvem aktuální tabulky, podtržítkem („_
’), název sloupce, další podtržítko („_
“) a „fkey
'. V našem příkladu je název omezení cizího klíče student_country_id_fkey
, protože sloupec country_id
v tabulce student
je cizí klíč.
Výchozí název pro CHECK
omezení je podobné jako u cizího klíče, pouze je typu omezení ‘c
'. V našem příkladu sloupec age
v tabulce student
má toto omezení, takže výchozí název omezení je student_age_check
.
Výchozí název pro UNIQUE
omezení (zadejte ‘u
’) je název tabulky, podtržítko („_
’), název sloupce, další podtržítko („_
“) a „key
'. V našem příkladu tabulka student
má UNIQUE
omezení s názvem student_personal_number_key
. Pro více sloupců v omezení se název řídí podobnou konvencí, ale obsahuje názvy všech sloupců v definici omezení.