array_length()
изисква две параметри, като втората е размерността на масива:
array_length(id_clients, 1) > 0
И така:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Това изключва както празния масив и NULL.
Или използвайте cardinality()
в Postgres 9.4 или по-нова версия. Вижте добавения отговор от @bronzenose.
Но ако свързвате заявка за изпълнение с EXECUTE
, би било по-умно да предавате стойности с USING
клауза. Примери:
- Подизбиране на няколко реда като параметър за `изпълнение чрез`
- Как да използвам EXECUTE FORMAT ... USING във функция postgres
Между другото, за изрична проверка дали масивът е празен (както се казва в заглавието ви - но това не е какво ви трябва тук) просто го сравнете с празен масив:
id_clients = '{}'
Това е всичко. Получавате:
TRUE
.. масивът е празенNULL
.. масивът е NULLFALSE
.. всеки друг случай (масивът има елементи - дори и само NULL елементи)