Kris Jurka <books@ejurka.com> writes:
> The below code creates overloaded
> functions that do not produce this error when called with a NULL argument.
> jurka=# CREATE FUNCTION g(int) RETURNS int AS 'SELECT 1;' LANGUAGE sql;
> CREATE FUNCTION
> jurka=# CREATE FUNCTION g(float) RETURNS int AS 'SELECT 2;' LANGUAGE sql;
> CREATE FUNCTION
float (a/k/a float8) is the preferred type in the numeric hierarchy,
so it will win in a tug-of-war against int. There are other cases
where it would lose (eg, had you declared g(text)). The objective
of the type rules is most certainly not to fail in any ambiguous
situation --- if we did, we'd have a completely unusable system.
regards, tom lane