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:- Multirow subselect como parâmetro para `executar usando`
- Como usar EXECUTE FORMAT ... USING na função postgres
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á vazioNULL
.. array é NULLFALSE
.. qualquer outro caso (array tem elementos - mesmo que apenas elementos NULL)