Функция plpgsql:
CREATE OR REPLACE FUNCTION testarray (int[]) returns int as $$
DECLARE
len int;
BEGIN
len := array_upper($1);
return len;
END
$$ language plpgsql;
Запрос node-postgres + тестовый массив:
var ta = [1,2,3,4,5];
client.query('SELECT testarray($1)', [ta], function(err, result) {
console.log('err: ' + err);
console.log('result: ' + result);
});
Вывод с сервера узла:
err: error: значение массива должно начинаться с "{" или информация об измерении
результат: undefined
Я также попытался применить параметр в клиентском запросе, например testarray($1::int[])
, который вернул ту же ошибку.
Я изменил аргумент функции на (anyarray int)
, и ошибка вывода изменилась:
err: error: недопустимый синтаксис ввода для целого числа: "1,2,3,4,5"
результат: undefined
А также пара других вариантов.
Я ищу вариант, который не вызывает ошибок и возвращает 5.
Я читал о проблеме синтаксического анализа Postgres и об этом вопросе о переполнении стека для параметризованных массивов в node-postgres:
Но ответа, похоже, не было.