Ao criar uma tabela no PostgreSQL, os nomes de restrição padrão serão atribuídos se não forem fornecidos:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
Mas usar ALTER TABLE
para adicionar uma restrição parece que um nome é obrigatório:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
Isso causou algumas inconsistências de nomenclatura em projetos em que trabalhei e suscita as seguintes perguntas:
Existe uma maneira simples de adicionar uma restrição a uma tabela existente com o nome que ela teria recebido se adicionada durante a criação da tabela?
Caso contrário, os nomes padrão devem ser evitados para evitar inconsistências?
postgresql
naming-conventions
constraints
Ian Mackinnon
fonte
fonte
Respostas:
O manual é bastante claro sobre isso (" tableconstraint: Este formulário adiciona uma nova restrição a uma tabela usando a mesma sintaxe de CREATE TABLE. ")
Então você pode simplesmente executar:
fonte
CONSTRAINT
comoALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);
e recebendo erros. Obrigado!Os nomes padrão para índices no PostgreSQL são:
{tablename}_{columnname(s)}_{suffix}
onde o sufixo é um dos seguintes:
pkey
para uma restrição de chave primáriakey
para uma restrição únicaexcl
para uma restrição de exclusãoidx
para qualquer outro tipo de índicefkey
para uma chave estrangeiracheck
para uma restrição CheckO sufixo padrão para sequências é
seq
para todas as sequênciasProva de sua restrição UNIQUE:
fonte
fkey
e que as restrições de chave estrangeira de várias colunas parecem incluir apenas o nome da primeira coluna.CREATE TABLE mytable (mycolumn numeric UNIQUE);