Обсуждение: 1.0 in function call not regarded as REAL in 7.3.2

Поиск
Список
Период
Сортировка

1.0 in function call not regarded as REAL in 7.3.2

От
Boris Folgmann
Дата:
Hi!

I've triggered a type related problem in postgresql-7.3.2-3
It worked in postgresql-7.2.3-5.80.

CREATE OR REPLACE FUNCTION _rmin(REAL, REAL)
RETURNS REAL AS '
BEGIN
        IF $1 <= $2 THEN
                RETURN $1;
        ELSE
                RETURN $2;
        END IF;
END;
' LANGUAGE 'plpgsql' WITH (ISCACHABLE);

This works:

SELECT  _rmin(1.0, CAST(123 AS REAL));
 _rmin
-------
     1
(1 Zeile)

This not:

SELECT  _rmin(1.0, CAST(123 AS REAL)/25);
ERROR:  Funktion _rmin(numeric, double precision) existiert nicht
        Unable to identify a function that satisfies the given argument types
        You may need to add explicit typecasts

Look closely: postmaster now thinks that the first argument 1.0 is NUMERIC,
but I added only the /25 for the _second_ argument!

cu,
    boris

--
Dipl.-Inf. Boris Folgmann   mailto:boris@folgmann.de
TeamForge GmbH              http://www.teamforge.de

Re: 1.0 in function call not regarded as REAL in 7.3.2

От
Tom Lane
Дата:
Boris Folgmann <misc@folgmann.com> writes:
> Look closely: postmaster now thinks that the first argument 1.0 is NUMERIC,

Yup.  This is not a bug, it's intentional (and per SQL spec, AFAICT).

Your problem is that 123::real/25 yields a double precision result,
which is not implicitly castable to real anymore.  I'd suggest
switching the function arguments to double precision.

            regards, tom lane