問題:
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
という名前の制約 。制約内の複数の列の場合、名前は同様の規則に従いますが、制約の定義にすべての列の名前が含まれます。