Thread: BUG #13608: 3 argument range constructor functions

BUG #13608: 3 argument range constructor functions

From
robert.kruus@gov.sk.ca
Date:
The following bug has been logged on the website:

Bug reference:      13608
Logged by:          Robert Kruus
Email address:      robert.kruus@gov.sk.ca
PostgreSQL version: 9.3.9
Operating system:   FreeBSD (9.2)
Description:

The int4range, int8range, daterange functions seem to be ignoring the 3rd
argument which specifies the interval bounds.
i.e.
SELECT daterange('2010-01-01'::date, '2011-01-01'::date, '()'::text);
        daterange
-------------------------
 [2010-01-02,2011-01-02)

It works fine for numrange, tsrange, tstzrange.
i.e.
 SELECT numrange(1,4, '()');
 numrange
----------
 (1,4)

PostgreSQL 9.3.9 on amd64-portbld-freebsd9.2, compiled by FreeBSD clang
version 3.3 (tags/RELEASE_33/final 183502) 20130610, 64-bit

Re: BUG #13608: 3 argument range constructor functions

From
Tom Lane
Date:
robert.kruus@gov.sk.ca writes:
> The int4range, int8range, daterange functions seem to be ignoring the 3rd
> argument which specifies the interval bounds.
> i.e.
> SELECT daterange('2010-01-01'::date, '2011-01-01'::date, '()'::text);
>         daterange
> -------------------------
>  [2010-01-02,2011-01-02)

It's not ignoring it.  What it's doing is canonicalizing the range so that
equivalent ranges actually look the same.  Note your bounds have changed.
(BTW, you misquoted the result; the upper date does not change in this
case, at least not for me.)

See the discussion of discrete vs continuous range types at

http://www.postgresql.org/docs/9.3/static/rangetypes.html#RANGETYPES-DISCRETE

            regards, tom lane