Problema:
Desea conocer los nombres predeterminados de las restricciones en una tabla en PostgreSQL.
Ejemplo:
En nuestra base de datos, creamos dos tablas, country
y student
, con las siguientes restricciones:PRIMARY KEY
(la columna id
en las tablas country
y student
), FOREIGN KEY
(la columna country_id
en la tabla student
), DEFAULT
(la columna name
en la tabla student
), UNIQUE
(la columna name
en la tabla country
y la columna personal_number
en la tabla student
), y CHECK
(la columna age
en la tabla student
).
Solución:
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) );
Veamos cómo PostgreSQL nombra las restricciones de estas tablas de forma predeterminada. Usa esta consulta para verlos:
SELECT conname, contype FROM pg_catalog.pg_constraint;
Aquí está el resultado:
connombre | contipo |
---|---|
país_pkey | p |
nombre_país_clave | u |
control_de_edad_del_estudiante | c |
student_pkey | p |
student_personal_number_key | u |
student_country_id_fkey | f |
Discusión:
Cuando creamos nuestras tablas, establecemos restricciones para algunas columnas. Sin embargo, no especificamos los nombres de estas restricciones, por lo que se nombran de forma predeterminada en PostgreSQL. ¿Cómo se generan los nombres predeterminados para las restricciones?
En PostgreSQL, los tipos de restricciones predeterminados son p
, f
, u
y c
.
La PRIMARY KEY
se nombra por defecto con el nombre de la tabla, un guión bajo (‘_
'), y 'pkey
'. En nuestra tabla de resultados anterior, puede ver dos PRIMARY KEY
nombres (escriba ‘p
’) – uno con el nombre country_pkey
en el country
table y otra con el nombre student_pkey
en el student
mesa.
UNA FOREIGN KEY
está indicado por el tipo de restricción 'f
'. Su nombre es generado por el nombre de la tabla actual, un guión bajo (‘_
’), el nombre de la columna, otro guión bajo (‘_
'), y 'fkey
'. En nuestro ejemplo, el nombre de la restricción de clave externa es student_country_id_fkey
, porque la columna country_id
en la tabla student
es una clave externa.
El nombre predeterminado para un CHECK
La restricción es similar a la de una clave externa, solo que es del tipo de restricción 'c
'. En nuestro ejemplo, la columna age
en la tabla student
tiene esta restricción, por lo que el nombre predeterminado de la restricción es student_age_check
.
El nombre predeterminado para un UNIQUE
restricción (escriba ‘u
') es el nombre de la tabla, un guión bajo ('_
’), el nombre de la columna, otro guión bajo (‘_
'), y 'key
'. En nuestro ejemplo, la tabla student
tiene un UNIQUE
restricción llamada student_personal_number_key
. Para columnas múltiples en una restricción, el nombre sigue una convención similar pero contiene los nombres de todas las columnas en la definición de la restricción.