Thread: BUG #12046: lower_inf('(-infinity,today)'::tsrange) returns false

BUG #12046: lower_inf('(-infinity,today)'::tsrange) returns false

From
presnypreklad@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      12046
Logged by:          Nathan Cutler
Email address:      presnypreklad@gmail.com
PostgreSQL version: 9.3.5
Operating system:   openSUSE 13.2
Description:

In the course of writing a program that accepts tsrange literals from the
user, which are then plugged into various SQL queries, today I was testing
some tsranges to see how they are interpreted by PostgreSQL 9.3.5.

This one, in particular, behaves strangely: '(-infinity,today)'::tsrange

The lower_inf function says the lower bound is not infinite (!)

test=> SELECT lower_inf('(-infinity,today)'::tsrange);
 lower_inf
-----------
 f
(1 row)

Yet PostgreSQL reports that this tsrange contains a timestamp like
'1000-01-01 BC' . . .

test=> SELECT '(-infinity,today)'::tsrange @> '1000-01-01 BC'::timestamp;
 ?column?
----------
 t
(1 row)

Seems like a bug?

Re: BUG #12046: lower_inf('(-infinity,today)'::tsrange) returns false

From
Tom Lane
Date:
presnypreklad@gmail.com writes:
> In the course of writing a program that accepts tsrange literals from the
> user, which are then plugged into various SQL queries, today I was testing
> some tsranges to see how they are interpreted by PostgreSQL 9.3.5.

> This one, in particular, behaves strangely: '(-infinity,today)'::tsrange

> The lower_inf function says the lower bound is not infinite (!)

This is not surprising: the range stuff has its own notion of "infinite
bounds", which has nothing to do with any infinity concept that the
underlying datatype may or may not have.  Trying to unify those concepts
would greatly complicate the interface between ranges and their component
datatypes, without actually buying very much AFAICS.

            regards, tom lane