array_length()
wymaga dwóch parametry, drugi to wymiar tablicy:
array_length(id_clients, 1) > 0
A więc:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Wyklucza to zarówno pustą tablicę i NULL.
Lub użyj cardinality()
w Postgresie 9.4 lub nowszym. Zobacz dodaną odpowiedź @bronzenose.
Ale jeśli łączysz zapytanie do uruchomienia z EXECUTE
, mądrzej byłoby przekazać wartości za pomocą USING
klauzula. Przykłady:
- Multirow subselect jako parametr aby `wykonać używając`
- Jak używać EXECUTE FORMAT ... USING w funkcji postgres
BTW, aby wyraźnie sprawdzić, czy tablica jest pusta (jak mówi twój tytuł - ale to nie czego potrzebujesz tutaj) po prostu porównaj to z pustą tablicą:
id_clients = '{}'
To wszystko. Otrzymujesz:
TRUE
.. tablica jest pustaNULL
.. tablica ma wartość NULLFALSE
.. w każdym innym przypadku (tablica zawiera elementy - nawet jeśli są to tylko elementy NULL)