Я получаю сообщение об ошибке от детерминированной функции PG, которая кажется зависимой от того, когда я вызываю ее в запросе.
Функция:
CREATE OR REPLACE FUNCTION ircm(starting_money numeric, value numeric, days numeric)
RETURNS numeric
AS $$
BEGIN
-- Calculate effective interest rate, compounded monthly.
RETURN 12*(pow((value/starting_money),(1./(12.*(days/365.)))) - 1);
END;
$$ LANGUAGE plpgsql;
Если я вызываю еев простом операторе SELECT все работает нормально:
SELECT ircm(100.00,60.427500643787215,30)
Result: -4.79925436505569765596
Однако, когда я выполняю тот же самый вызов из другого оператора SELECT с использованием подзапроса:
SELECT
ircm(100.00,m.v::numeric,30) AS result
FROM(
SELECT 60.427500643787215 AS v
) m
Я получаю ошибку:
ERROR: a negative number raised to a non-integer power yields a complex result
CONTEXT: PL/pgSQL function "ircm" line 6 at RETURN
Поскольку вызовы логически эквивалентны, как PG может возвращать ошибку для одного вызова, но не для другого?Я убедился, что в моей базе данных есть только одно определение функции ircm.Я попытался удалить / добавить это снова, чтобы удостовериться, что PG каким-то образом не кэширует искаженное определение.