Posso adicionar uma restrição exclusiva a uma tabela PostgreSQL, depois que já foi criada?
-
19-09-2019 - |
Pergunta
Eu tenho a tabela a seguir:
tickername | tickerbbname | tickertype
------------+---------------+------------
USDZAR | USDZAR Curncy | C
EURCZK | EURCZK Curncy | C
EURPLN | EURPLN Curncy | C
USDBRL | USDBRL Curncy | C
USDTRY | USDTRY Curncy | C
EURHUF | EURHUF Curncy | C
USDRUB | USDRUB Curncy | C
Eu não quero que haja mais de uma coluna para qualquer um dado tickername
/tickerbbname
par. Já criei a tabela e tenho muitos dados (que eu já assegurei que atenda aos critérios exclusivos). À medida que fica maior, o espaço para erros se aproxima.
Existe alguma maneira de adicionar um UNIQUE
restrição neste momento?
Solução
psql
Ajuda embutida:
\h ALTER TABLE
Também documentado no Postgres Docs (Um excelente recurso, além de fáceis de ler também).
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
Outras dicas
Sim você pode. Mas se você tiver entradas que não sejam exclusivas na sua mesa, ela falhará. Aqui está o como adicionar restrições exclusivas em sua mesa. Se você estiver usando o PostGresql 9.x, poderá seguir a instrução abaixo.
CREATE UNIQUE INDEX constraint_name ON table_name (columns);
Sim, você pode adicionar uma restrição única após o fato. No entanto, se você tiver entradas não únicas na sua tabela Postgres, reclamarão até você corrigi-las.
Se você tivesse uma tabela que já tinha restrições existentes com base em vamos dizer: nome e último nome e você queria adicionar mais uma restrição exclusiva, você teve que soltar toda a restrição:
ALTER TABLE your_table DROP CONSTRAINT constraint_name;
Verifique se a nova restrição que você deseja adicionar é única/ não nula (se o Microsoft SQL, ele pode conter apenas um valor nulo) em todos os dados nessa tabela e, em seguida, você pode recriá-lo.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);