Problème :
Vous voulez connaître les noms par défaut des contraintes dans une table dans PostgreSQL.
Exemple :
Dans notre base de données, nous créons deux tables, country
et student
, avec les contraintes suivantes :PRIMARY KEY
(la colonne id
dans les tableaux country
et student
), FOREIGN KEY
(la colonne country_id
dans le tableau student
), DEFAULT
(la colonne name
dans le tableau student
), UNIQUE
(la colonne name
dans le tableau country
et la colonne personal_number
dans le tableau student
), et CHECK
(la colonne age
dans le tableau student
).
Solution :
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) );
Montrons comment PostgreSQL nomme les contraintes de ces tables par défaut. Utilisez cette requête pour les voir :
SELECT conname, contype FROM pg_catalog.pg_constraint;
Voici le résultat :
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 |
Discussion :
Lorsque nous créons nos tables, nous définissons des contraintes pour certaines colonnes. Cependant, nous ne spécifions pas les noms de ces contraintes, elles sont donc nommées par défaut dans PostgreSQL. Comment les noms par défaut des contraintes sont-ils générés ?
Dans PostgreSQL, les types de contraintes par défaut sont p
, f
, u
, et c
.
La PRIMARY KEY
est nommé par défaut avec le nom de la table, un tiret bas (‘_
') et 'pkey
'. Dans notre tableau de résultats ci-dessus, vous pouvez voir deux PRIMARY KEY
noms (tapez ‘p
’) – un par le nom country_pkey
dans le country
table et une autre par le nom student_pkey
dans le student
tableau.
Une FOREIGN KEY
est indiqué par le type de contrainte ‘f
'. Son nom est généré par le nom de la table courante, un trait de soulignement (‘_
') , le nom de la colonne, un autre trait de soulignement ('_
') et 'fkey
'. Dans notre exemple, le nom de la contrainte de clé étrangère est student_country_id_fkey
, car la colonne country_id
dans le tableau student
est une clé étrangère.
Le nom par défaut pour un CHECK
contrainte est similaire à celle d'une clé étrangère, sauf qu'elle est du type de contrainte 'c
'. Dans notre exemple, la colonne age
dans le tableau student
a cette contrainte, donc le nom de la contrainte par défaut est student_age_check
.
Le nom par défaut pour un UNIQUE
contrainte (type ‘u
') est le nom de la table, un trait de soulignement ('_
'), le nom de la colonne, un autre trait de soulignement ('_
') et 'key
'. Dans notre exemple, la table student
a un UNIQUE
contrainte nommée student_personal_number_key
. Pour plusieurs colonnes dans une contrainte, le nom suit une convention similaire mais contient les noms de toutes les colonnes dans la définition de la contrainte.