sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuál es el nombre de restricción predeterminado en PostgreSQL?

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.