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

Como verificar se um array está vazio no Postgres


array_length() requer dois parâmetros, sendo o segundo a dimensão do array:
array_length(id_clients, 1) > 0

Então:
IF array_length(id_clients, 1) > 0 THEN
    query := query || format(' AND id = ANY(%L))', id_clients);
END IF;

Isso exclui a matriz vazia e NULO.

Ou use cardinality() no Postgres 9.4 ou posterior. Veja a resposta adicionada por @bronzenose.

Mas se você estiver concatenando uma consulta para executar com EXECUTE , seria mais inteligente passar valores com um USING cláusula. Exemplos:

BTW, para verificar explicitamente se um array está vazio (como seu título diz - mas isso não o que você precisa aqui) basta compará-lo com um array vazio:
id_clients = '{}'

Isso é tudo. Você obtém:

TRUE .. array está vazio
NULL .. array é NULL
FALSE .. qualquer outro caso (array tem elementos - mesmo que apenas elementos NULL)