Обсуждение: BUG #13608: 3 argument range constructor functions
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
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