array_length()
kræver to parametre, den anden er dimensionen af arrayet:
array_length(id_clients, 1) > 0
Så:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Dette udelukker både tomme array og NULL.
Eller brug cardinality()
i Postgres 9.4 eller nyere. Se tilføjet svar af @bronzenose.
Men hvis du sammenkæder en forespørgsel til at køre med EXECUTE
, ville det være smartere at sende værdier med en USING
klausul. Eksempler:
- Multirow subselect som parameter at `udføre ved hjælp af`
- Sådan bruges EXECUTE FORMAT ... BRUG i postgres-funktionen
BTW, for eksplicit at kontrollere, om et array er tomt (som din overskrift siger - men det er ikke hvad du har brug for her) bare sammenligne det med et tomt array:
id_clients = '{}'
Det er alt. Du får:
TRUE
.. array er tomNULL
.. array er NULLFALSE
.. enhver anden sag (array har elementer - også selvom det kun er NULL-elementer)