PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So überprüfen Sie, ob ein Array in Postgres leer ist

array_length() erfordert zwei Parameter, wobei der zweite die Dimension des Arrays ist:

array_length(id_clients, 1) > 0

Also:

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

Dies schließt beide leeren Arrays und aus NULL.

Oder verwenden Sie cardinality() in Postgres 9.4 oder höher. Siehe hinzugefügte Antwort von @bronzenose.

Aber wenn Sie eine Abfrage verketten, um sie mit EXECUTE auszuführen , wäre es klüger, Werte mit einem USING zu übergeben Klausel. Beispiele:

Übrigens, um explizit zu prüfen, ob ein Array leer ist (wie Ihr Titel sagt - aber das ist nicht was Sie hier brauchen) vergleichen Sie es einfach mit einem leeren Array:

id_clients = '{}'

Das ist alles. Sie erhalten:

TRUE .. Array ist leer
NULL .. array ist NULL
FALSE .. jeder andere Fall (Array hat Elemente - auch wenn es nur NULL-Elemente sind)