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:
- Mehrzeilige Unterauswahl als Parameter zum `Ausführen mit`
- So verwenden Sie EXECUTE FORMAT ... USING in der Postgres-Funktion
Ü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 leerNULL
.. array ist NULLFALSE
.. jeder andere Fall (Array hat Elemente - auch wenn es nur NULL-Elemente sind)