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í.