I'm not sure if this should be considered a bug or not. At least in my case it
doesn't cause a problem. I think it could always be worked around with
explicit casts in any case, it just seems... wrong:
db=> create or replace function array_length(integer[]) returns integer as 'SELECT array_upper($1)-array_lower($1)+1'
language sql strict immutable;
ERROR: function array_upper(integer[]) does not exist
HINT: No function matches the given name and argument types. You may need to add explicit typecasts.
db=> create or replace function array_length(anyarray) returns integer as 'SELECT array_upper($1)-array_lower($1)+1'
language sql strict immutable;
CREATE FUNCTION
--
greg