array_length()
vyžaduje dva parametry, druhý je rozměr pole:
array_length(id_clients, 1) > 0
Takže:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
To vylučuje prázdné pole a NULL.
Nebo použijte cardinality()
v Postgres 9.4 nebo novější. Viz přidaná odpověď od @bronzenose.
Ale pokud zřetězíte dotaz ke spuštění pomocí EXECUTE
, bylo by chytřejší předávat hodnoty pomocí USING
doložka. Příklady:
- Víceřádkový podvýběr jako parametr k `spustit pomocí`
- Jak používat EXECUTE FORMAT ... POUŽÍVÁNÍ ve funkci postgres
BTW, explicitně zkontrolovat, zda pole je prázdné (jak říká váš nadpis – ale to není co zde potřebujete) stačí porovnat s prázdným polem:
id_clients = '{}'
To je vše. Získáte:
TRUE
.. pole je prázdnéNULL
.. pole je NULLFALSE
.. jakýkoli jiný případ (pole má prvky – i když jen NULL prvky)