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

Restrição NOT NULL sobre um conjunto de colunas


@Igor está certo e alguns OR 'ed são rápidos e simples.

Para uma longa lista de colunas (a , b , c , d , e , f , g no exemplo), isso é mais curto e rápido:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>mexa aqui
Antigo violino SQL.

Como funciona?


Uma forma mais detalhada do acima seria:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW é sintaxe redundante aqui.

Testando uma ROW expressão com IS NULL somente relata TRUE se cada coluna é NULL - o que é exatamente o que queremos excluir.

Não é possível simplesmente reverter esta expressão com (a,b,c,d,e,f,g) IS NOT NULL , porque isso testaria se cada coluna IS NOT NULL . Em vez disso, negue a expressão inteira com NOT . Voilá.

Mais detalhes no manual aqui e aqui.

Uma expressão da forma:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

alcançaria o mesmo, menos elegantemente e com uma grande restrição:só funciona para colunas de tipo de dados correspondente , enquanto a verificação em um ROW expressão funciona com qualquer colunas.