CREATE OR REPLACE FUNCTION fnMyFunction(recipients recipient[]) ...
FOREACH v_recipient IN ARRAY recipients
LOOP
v_total := v_total + v_recipient.amount;
INSERT INTO tmp_recipients(id, amount)
VALUES(v_recipient.id, v_recipient.amount::numeric(10,2));
END LOOP;
...
Это прекрасно работает в среде разработки, но только что выяснилось, что среда выпуска — 8.4, которая, похоже, не поддерживает конструкцию FOREACH. Я надеялся, что кто-то может пролить свет на альтернативную реализацию цикла for, используя набор параметров массива и используя значения из массива аналогичным образом, чтобы избежать полного рефакторинга.
Сообщение об ошибке, которое я получаю:
ОШИБКА: синтаксическая ошибка в состоянии SQL "FOREACH" или рядом с ним: 42601 Контекст: оператор SQL в функции PL/PgSQL "fnMyFunction" рядом со строкой ##
Среда db находится на общем хосте, поэтому у меня нет вариантов обновления платформы.
Я пометил postgres 9.1 и 8.4, потому что эта функция правильно работает в 9.x, но не работает в 8.4.