PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Qual é o nome de restrição padrão no PostgreSQL?

Problema:


Você deseja saber os nomes padrão das restrições em uma tabela no PostgreSQL.

Exemplo:


Em nosso banco de dados, criamos duas tabelas, country e student , com as seguintes restrições:PRIMARY KEY (a coluna id nas tabelas country e student ), FOREIGN KEY (a coluna country_id na tabela student ), DEFAULT (a coluna name na tabela student ), UNIQUE (a coluna name na tabela country e a coluna personal_number na tabela student ) e CHECK (a coluna age na tabela student ).

Solução:

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)
);

Vamos mostrar como o PostgreSQL nomeia as restrições dessas tabelas por padrão. Use esta consulta para vê-los:
SELECT conname, contype
FROM pg_catalog.pg_constraint;

Aqui está o resultado:
conname contipo
país_pkey p
country_name_key u
student_age_check c
aluno_pkey p
aluno_personal_number_key u
student_country_id_fkey f

Discussão:


Quando criamos nossas tabelas, definimos restrições para algumas colunas. No entanto, não especificamos os nomes para essas restrições, então elas são nomeadas por padrão no PostgreSQL. Como os nomes padrão para restrições são gerados?

No PostgreSQL, os tipos de restrição padrão são p , f , u e c .

A PRIMARY KEY é nomeado por padrão com o nome da tabela, um sublinhado (‘_ ’) e ‘pkey '. Em nossa tabela de resultados acima, você pode ver duas PRIMARY KEY nomes (digite 'p ’) – um com o nome country_pkey no country tabela e outra com o nome student_pkey no student tabela.

Uma FOREIGN KEY é indicado pelo tipo de restrição 'f '. Seu nome é gerado pelo nome da tabela atual, um sublinhado (‘_ ’), o nome da coluna, outro sublinhado (‘_ ’) e ‘fkey '. Em nosso exemplo, o nome da restrição de chave estrangeira é student_country_id_fkey , porque a coluna country_id na tabela student é uma chave estrangeira.

O nome padrão para um CHECK restrição é semelhante à de uma chave estrangeira, só que é do tipo de restrição 'c '. Em nosso exemplo, a coluna age na tabela student tem essa restrição, então o nome padrão da restrição é student_age_check .

O nome padrão para um UNIQUE restrição (digite 'u ’) é o nome da tabela, um sublinhado (‘_ ’), o nome da coluna, outro sublinhado (‘_ ') e 'key '. Em nosso exemplo, a tabela student tem um UNIQUE restrição chamada student_personal_number_key . Para várias colunas em uma restrição, o nome segue uma convenção semelhante, mas contém os nomes de todas as colunas na definição da restrição.