問題:
PostgreSQLのテーブルの制約のデフォルト名を知りたい。
例:
データベースに、country およびstudent 、次の制約があります:PRIMARY KEY (列id テーブル内country およびstudent )、FOREIGN KEY (列country_id テーブル内student )、DEFAULT (列name テーブル内student )、UNIQUE (列name テーブル内country および列personal_number テーブル内student )、およびCHECK (列age テーブル内student 。
解決策:
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) );
PostgreSQLがデフォルトでこれらのテーブルの制約にどのように名前を付けるかを表示してみましょう。このクエリを使用してそれらを確認します:
SELECT conname, contype FROM pg_catalog.pg_constraint;
結果は次のとおりです。
| 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 |
ディスカッション:
テーブルを作成するときに、いくつかの列に制約を設定します。ただし、これらの制約の名前は指定していないため、PostgreSQLではデフォルトで名前が付けられています。制約のデフォルト名はどのように生成されますか?
PostgreSQLでは、デフォルトの制約タイプはpです。 、f 、u 、およびc 。
PRIMARY KEY デフォルトでは、テーブル名にアンダースコア(‘_)が付けられます。 ’)、および‘ pkey ’。上記の結果表では、2つのPRIMARY KEYを確認できます。 名前(「p」と入力します ’)– country_pkeyという名前の1つ country テーブルとstudent_pkeyという名前の別のテーブル student テーブル。
FOREIGN KEY 制約タイプ「f」で示されます ’。その名前は、現在のテーブルの名前であるアンダースコア(‘_)によって生成されます。 ’)、列名、別のアンダースコア(‘ _ ’)、および‘ fkey ’。この例では、外部キー制約の名前はstudent_country_id_fkeyです。 、列country_idのため テーブル内student は外部キーです。
CHECKのデフォルト名 制約は外部キーの制約と似ていますが、制約タイプが「c」である点が異なります。 ’。この例では、列age テーブル内student この制約があるため、デフォルトの制約名はstudent_age_checkです。 。
UNIQUEのデフォルト名 制約(タイプ‘u ’)はテーブル名、アンダースコア(‘ _ ’)、列名、別のアンダースコア(‘ _ ’)、および‘ key ’。この例では、テーブルstudent UNIQUEがあります student_personal_number_keyという名前の制約 。制約内の複数の列の場合、名前は同様の規則に従いますが、制約の定義にすべての列の名前が含まれます。