array_length()
richiede due parametri, il secondo è la dimensione dell'array:
array_length(id_clients, 1) > 0
Quindi:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Ciò esclude sia l'array vuoto che NULLA.
Oppure usa cardinality()
in Postgres 9.4 o successivo. Vedi la risposta aggiunta da @bronzenose.
Ma se stai concatenando una query da eseguire con EXECUTE
, sarebbe più intelligente passare i valori con un USING
clausola. Esempi:
- Selezione secondaria multiriga come parametro per `eseguire usando`
- Come usare ESEGUI FORMATO... UTILIZZO nella funzione postgres
A proposito, per verificare esplicitamente se un array è vuoto (come dice il tuo titolo, ma non). quello che ti serve qui) confrontalo con un array vuoto:
id_clients = '{}'
È tutto. Ottieni:
TRUE
.. l'array è vuotoNULL
.. l'array è NULLFALSE
.. qualsiasi altro caso (l'array ha elementi, anche se solo elementi NULL)