PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment vérifier si un tableau est vide dans Postgres

array_length() nécessite deux paramètres, le second étant la dimension du tableau :

array_length(id_clients, 1) > 0

Donc :

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

Cela exclut à la fois le tableau vide et NUL.

Ou utilisez cardinality() dans Postgres 9.4 ou ultérieur. Voir la réponse ajoutée par @bronzenose.

Mais si vous concaténez une requête à exécuter avec EXECUTE , il serait plus intelligent de passer des valeurs avec un USING clause. Exemples :

BTW, pour vérifier explicitement si un tableau est vide (comme votre titre l'indique - mais ce n'est pas ce dont vous avez besoin ici) comparez-le simplement à un tableau vide :

id_clients = '{}'

C'est tout. Vous obtenez :

TRUE .. le tableau est vide
NULL .. le tableau est NULL
FALSE .. tout autre cas (le tableau a des éléments - même s'il ne s'agit que d'éléments NULL)