Eu gostaria de configurar uma restrição CHECK que garante que text[]
os elementos de uma coluna contenham apenas determinados valores.
Configurando um exemplo:
CREATE TABLE foo(
countries text[]
);
INSERT INTO foo VALUES ('{"Morocco", "Mali", "Indonesia"}');
INSERT INTO foo VALUES ('{"Sokovia", "Mali"}');
Agora apenas "Marrocos", "Mali" e "Indonésia" devem ser permitidos, então a segunda linha deve ser rejeitada pela restrição.
Eu tenho uma solução "funcionando":
CHECK (array_length(
array_remove(
array_remove(
array_remove(
countries,
'Indonesia'
), 'Mali'
), 'Morocco'
), 1) IS NULL)
Mas isso não é muito legível.
Eu tentei isso também:
CHECK ((
SELECT unnest(countries)
EXCEPT
SELECT unnest(array['Morocco', 'Mali', 'Indonesia'])
) IS NULL)
mas:
ERRO não pode usar a subconsulta na restrição de verificação
Use o operador “está contido em” em sua restrição de verificação: