9

What is the meaning of 'infinity' in PostgreSQL range types? Is there any difference between specifying infinity or -infinity as a bound, or NULL? I.e. is infinity an explicit form of specifying that the range bound is infinite, whereas NULL would implicit specify an infinite bound range?

See the following examples:

SELECT tstzrange('-infinity','infinity') && tstzrange(NULL, NULL);
 ?column?
----------
 t

SELECT tstzrange('2013-01-01 00:00:00+01', '2013-02-01 00:00:00+01')
    && tstzrange(NULL, '2013-03-01 00:00:00+01');
 ?column?
----------
 t

SELECT tstzrange('2013-01-01 00:00:00+01', '2013-02-01 00:00:00+01')
    && tstzrange('-infinity', '2013-03-01 00:00:00+01');
 ?column?
----------
 t
Erwin Brandstetter
  • 605,456
  • 145
  • 1,078
  • 1,228
Cochise Ruhulessin
  • 1,001
  • 1
  • 11
  • 15

1 Answers1

14

Update: See this later, better explanation:


NULL does the same thing for the overlap operator && as -infinity or infinity, respectively. I quote the manual here:

Using NULL for either bound causes the range to be unbounded on that side.

But as value, NULL is still distinct from 'infinity'!

SELECT tstzrange('-infinity','infinity') = tstzrange(NULL, NULL);

Returns FALSE (not NULL, mind you!).

More in this SQLfiddle.

Erwin Brandstetter
  • 605,456
  • 145
  • 1,078
  • 1,228
  • 1
    How tests #4 and #6 are true if `SELECT tstzrange('-infinity','infinity') <@ tstzrange(NULL, NULL);` eg '[-infinity,infinity]' is inside '[,)'? – Eugen Konkov Oct 26 '19 at 13:30
  • @EugenKonkov: That's a very good question. I have no good explanation. I don't think there *is* a good explanation other than that's the least awkward arrangement with all the corner cases arising from the mix of "unbounded" and `infinity` in ranges. – Erwin Brandstetter May 20 '21 at 00:26