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.