Обсуждение: timestamp out of range while casting return value to function'sreturn type

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

timestamp out of range while casting return value to function'sreturn type

От
Thiemo Kellner
Дата:
Hi all

I created a function that ought to return a timestamptz (another  
likewise timestamp) but calling it, I get mentionied error. What do I  
miss? I tried to return a timestamp of the year 2000 to no avail.

Call: select utils.get_max_timestamptz();
--

Function
--
create or replace function GET_MAX_TIMESTAMPTZ()
   returns timestamptz
   language plpgsql
   immutable
   -- Include the hosting schema into search_path so that dblink
   -- can find the pglogger objects. There is no need to access
   -- objects in other schematas not covered with public.
   as
$body$
     begin
         -- highest timestamps on 64bit lubuntu vanilla PostgreSQL 11.3
         return '294277-01-01 00:59:59.999999'::timestamptz;
     end;
$body$;

Kind regards

Thiemo

-- 
S/MIME Public Key: https://oc.gelassene-pferde.biz/index.php/s/eJuAUFONag6ofnH
Signal (Safer than WhatsApp): +49 1578 7723737
Handys: +41 78 947 36 21 | +49 1578 772 37 37
Tox-Id:  
B7282A9E31D944DDAD1ECC5B33C36AAE80B32D119AB7391D602C937A65E8CA0625C495C5322B




Re: timestamp out of range while casting return value to function's return type

От
Tom Lane
Дата:
Thiemo Kellner <thiemo@gelassene-pferde.biz> writes:
> I created a function that ought to return a timestamptz (another  
> likewise timestamp) but calling it, I get mentionied error. What do I  
> miss?

Whether that:

>          return '294277-01-01 00:59:59.999999'::timestamptz;

is in range or not depends on your timezone setting.  It would
be considered in-range in UTC+1 or further east (so that the date
wraps back to 294276AD); in or west of Greenwich, not so much.

> I tried to return a timestamp of the year 2000 to no avail.

Hardly ...

            regards, tom lane



Re: timestamp out of range while casting return value to function'sreturn type

От
Thiemo Kellner
Дата:
Hi Tom

Thanks for replying so fast. You are absolutely right.

I changed the code file but failed to install it. :-( I am sorry for  
not checking the obvious.

Kind regards

Thiemo

Quoting Tom Lane <tgl@sss.pgh.pa.us>:

> Thiemo Kellner <thiemo@gelassene-pferde.biz> writes:
>> I created a function that ought to return a timestamptz (another
>> likewise timestamp) but calling it, I get mentionied error. What do I
>> miss?
>
> Whether that:
>
>>          return '294277-01-01 00:59:59.999999'::timestamptz;
>
> is in range or not depends on your timezone setting.  It would
> be considered in-range in UTC+1 or further east (so that the date
> wraps back to 294276AD); in or west of Greenwich, not so much.
>
>> I tried to return a timestamp of the year 2000 to no avail.
>
> Hardly ...
>
>             regards, tom lane



-- 
S/MIME Public Key: https://oc.gelassene-pferde.biz/index.php/s/eJuAUFONag6ofnH
Signal (Safer than WhatsApp): +49 1578 7723737
Handys: +41 78 947 36 21 | +49 1578 772 37 37
Tox-Id:  
B7282A9E31D944DDAD1ECC5B33C36AAE80B32D119AB7391D602C937A65E8CA0625C495C5322B




Re: timestamp out of range while casting return value to function'sreturn type

От
Karsten Hilbert
Дата:
On Sat, Aug 24, 2019 at 12:57:07AM +0000, Thiemo Kellner wrote:

> Call: select utils.get_max_timestamptz();
> --
>
> Function
> --
> create or replace function GET_MAX_TIMESTAMPTZ()
>   returns timestamptz
>   language plpgsql
>   immutable
>   -- Include the hosting schema into search_path so that dblink
>   -- can find the pglogger objects. There is no need to access
>   -- objects in other schematas not covered with public.
>   as
> $body$
>     begin
>         -- highest timestamps on 64bit lubuntu vanilla PostgreSQL 11.3
>         return '294277-01-01 00:59:59.999999'::timestamptz;
>     end;
> $body$;

Also, but that's a nitpick perhaps not relevant to your use case:

This

    $> psql -d gnumed_v22 -U <redacted>
    psql (11.5 (Debian 11.5-1+deb10u1))

    gnumed_v22=> select 'infinity'::timestamptz;
    -[ RECORD 1 ]---------
    timestamptz | infinity

    gnumed_v22=>

is the highest timestamp.

(You *can* count the horses in *your* corral but there's
 always more of them elsewhere ;-)

Just so you are aware.

Best,
Karsten
--
GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B



Re: timestamp out of range while casting return value to function'sreturn type

От
Thiemo Kellner
Дата:
Hi Karsten

Thanks for the infinitly good hint. I remembered the infinity  
blurredly somewhen this morning, looked it up in the docs and already  
dumped my functions in favour of the infinity solution. :-) Great,  
that PostgreSQL has the infinity concept! Thanks

Kind regards

Thiemo

Quoting Karsten Hilbert <Karsten.Hilbert@gmx.net>:

> On Sat, Aug 24, 2019 at 12:57:07AM +0000, Thiemo Kellner wrote:
>
>> Call: select utils.get_max_timestamptz();
>> --
>>
>> Function
>> --
>> create or replace function GET_MAX_TIMESTAMPTZ()
>>   returns timestamptz
>>   language plpgsql
>>   immutable
>>   -- Include the hosting schema into search_path so that dblink
>>   -- can find the pglogger objects. There is no need to access
>>   -- objects in other schematas not covered with public.
>>   as
>> $body$
>>     begin
>>         -- highest timestamps on 64bit lubuntu vanilla PostgreSQL 11.3
>>         return '294277-01-01 00:59:59.999999'::timestamptz;
>>     end;
>> $body$;
>
> Also, but that's a nitpick perhaps not relevant to your use case:
>
> This
>
>     $> psql -d gnumed_v22 -U <redacted>
>     psql (11.5 (Debian 11.5-1+deb10u1))
>
>     gnumed_v22=> select 'infinity'::timestamptz;
>     -[ RECORD 1 ]---------
>     timestamptz | infinity
>
>     gnumed_v22=>
>
> is the highest timestamp.
>
> (You *can* count the horses in *your* corral but there's
>  always more of them elsewhere ;-)
>
> Just so you are aware.
>
> Best,
> Karsten
> --
> GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B



-- 
S/MIME Public Key: https://oc.gelassene-pferde.biz/index.php/s/eJuAUFONag6ofnH
Signal (Safer than WhatsApp): +49 1578 7723737
Handys: +41 78 947 36 21 | +49 1578 772 37 37
Tox-Id:  
B7282A9E31D944DDAD1ECC5B33C36AAE80B32D119AB7391D602C937A65E8CA0625C495C5322B