É possível ter uma restrição de coluna exclusiva personalizada da seguinte maneira? Suponha que eu tenha duas colunas subset
e type
ambas as strings (embora os tipos de dados provavelmente não importem).
Se type
for "verdadeiro", quero que a combinação de type
e subset
seja única. Caso contrário, não há restrições. Estou usando o PostgreSQL 8.4 no Debian.
postgresql
index
constraint
unique-constraint
postgresql-8.4
Faheem Mitha
fonte
fonte
Respostas:
Em outras palavras, você quer
subset
ser único setype = 'true'
.Um índice exclusivo parcial fará isso:
Dessa forma, você pode até fazer combinações com
NULL
únicas, o que não é possível de outra maneira - conforme detalhado nesta resposta relacionada:Restrição exclusiva de várias colunas do PostgreSQL e valores NULL
fonte
Isso é complementar à resposta de Erwin acima, mas o PostgreSQL suporta vários tipos de índices. Geralmente, estes não são mutuamente exclusivos. Você pode pensar neles como sendo:
Tudo isso pode ser combinado de várias maneiras. Tudo o que você está fazendo aqui é usar os recursos exclusivos e parciais, o que fornece índices únicos parciais (que são extremamente úteis para você descobrir).
Mas suponha que você queira ter um índice que não diferencia maiúsculas de minúsculas no campo do subconjunto em que tipo é verdadeiro. Então você adicionaria uma definição funcional:
Observe que isso cria um índice exclusivo na saída da função lower () chamada no atributo de subconjunto em que type é true.
fonte