Re: Argument casting hierarchy? - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Argument casting hierarchy?
Date
Msg-id 541ea689-9aa2-30c5-f504-441bb85bbe26@aklaver.com
Whole thread Raw
In response to Re: Argument casting hierarchy?  (Wells Oliver <wells.oliver@gmail.com>)
List pgsql-general
On 7/1/19 1:18 PM, Wells Oliver wrote:
> What is it you're showing me exactly? The valid numeric types accepted 
> (and cast) by both real and numerics?

That there is builtin casting for a source of either float4 or numeric 
to the types listed respectively and that numeric offers more choices. 
Might help you decide on which type you want to use for a single function.

> 
> On Mon, Jul 1, 2019 at 1:15 PM Adrian Klaver <adrian.klaver@aklaver.com 
> <mailto:adrian.klaver@aklaver.com>> wrote:
> 
>     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)
> 
> 
> 
>      >
>      > I appreciate it.
>      >
>      > --
>      > Wells Oliver
>      > wells.oliver@gmail.com <mailto:wells.oliver@gmail.com>
>     <mailto:wellsoliver@gmail.com <mailto:wellsoliver@gmail.com>>
> 
> 
>     -- 
>     Adrian Klaver
>     adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
> 
> 
> 
> -- 
> Wells Oliver
> wells.oliver@gmail.com <mailto:wellsoliver@gmail.com>


-- 
Adrian Klaver
adrian.klaver@aklaver.com



pgsql-general by date:

Previous
From: Wells Oliver
Date:
Subject: Re: Argument casting hierarchy?
Next
From: Ron
Date:
Subject: Re: Statistics tables not being updated anymore