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 елементи)