On 7/1/19 12:18 PM, Wells Oliver wrote: > Hi guys, hoping you can help clarify what the 'hierarchy' of casts might > be in function arguments. > > Meaning I have the following two functions > > stats.foo1 (a bigint, b bigint) returns a/b::numeric > > stats.foo1 (a real, b real) returns a/b::numeric > > It's essentially the same function, but I thought I had to create two to > accept the different types. > > However, when I call stats.foo1(3::smallint, 4::smallint) I receive the old: > > ERROR: function stats.foo(smallint, smallint) is not unique > > Along w/ the message to explicitly cast. > > I am essentially trying to write one function that will cast "down", I > guess, anything smaller than what's passed. I am guessing I only need > the real/real argument signature, but I wanted some clarity from the group.
From the system catalogs, where float4 = real:
select typname AS cast_target from pg_cast join pg_type on pg_cast.casttarget = pg_type.oid where castsource = 'float4'::regtype; cast_target ------------- int8 int2 int4 float8 numeric
select typname AS cast_target from pg_cast join pg_type on pg_cast.casttarget = pg_type.oid where castsource = 'numeric'::regtype; cast_target ------------- int8 int2 int4 float4 float8 money numeric (7 rows)