PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come verificare se un array è vuoto in Postgres

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:

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 è vuoto
NULL .. l'array è NULL
FALSE .. qualsiasi altro caso (l'array ha elementi, anche se solo elementi NULL)