array_length()
requiere dos parámetros, siendo el segundo la dimensión de la matriz:
array_length(id_clients, 1) > 0
Entonces:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Esto excluye la matriz vacía y NULO.
O use cardinality()
en Postgres 9.4 o posterior. Ver respuesta agregada por @bronzenose.
Pero si está concatenando una consulta para ejecutar con EXECUTE
, sería más inteligente pasar valores con USING
cláusula. Ejemplos:
- Subselección de varias filas como parámetro para `ejecutar usando`
- Cómo usar EJECUTAR FORMATO... USANDO en la función postgres
Por cierto, para verificar explícitamente si una matriz está vacía (como dice su título - pero eso es no lo que necesita aquí) simplemente compárelo con una matriz vacía:
id_clients = '{}'
Eso es todo. obtienes:
TRUE
.. la matriz está vacíaNULL
.. la matriz es NULLFALSE
.. cualquier otro caso (la matriz tiene elementos, incluso si solo son elementos NULL)