pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: themyth.cs@gmail.com
Cc: pgsql-docs@lists.postgresql.org
Subject: Re: INT4RANGE Upper bound always includes a higher number
Date: Tue, 03 Oct 2023 16:57:32 -0400
Message-ID: <2451988.1696366652@sss.pgh.pa.us> (raw)
In-Reply-To: <169635964997.3727336.14464470245213767871@wrigleys.postgresql.org>
References: <169635964997.3727336.14464470245213767871@wrigleys.postgresql.org>

PG Doc comments form <noreply@postgresql.org> writes:
> According to your example (copied from your docs):

> -- includes 3, does not include 7, and does include all points in between
> SELECT '[3,7)'::int4range;

> But this is not true, it shows 3 and 7

What's not true about it?

postgres=# SELECT 3 <@ '[3,7)'::int4range;
 ?column? 
----------
 t
(1 row)

postgres=# SELECT 6 <@ '[3,7)'::int4range;
 ?column? 
----------
 t
(1 row)

postgres=# SELECT 7 <@ '[3,7)'::int4range;
 ?column? 
----------
 f
(1 row)

7 is not a member of that range, only an endpoint.

> And if i do:
> SELECT '(3,7]'::INT4RANGE;
> It shows:

>  [4,8)
> (1 row)

This is a consequence of canonicalization.  There are four different
ways to write the same integer range:

	[3,6]
	[3,7)
	(2,6]
	(2,7)

All of these include 3,4,5,6 and no other integer.

INT4RANGE has a canonicalize function that converts ranges into the
"[m,n)" form so that ranges that are functionally identical look
identical.  If you don't like that, you can make a user-defined
range type with a different canonicalize function, or none at all.
See

https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-DISCRETE

			regards, tom lane





view thread (2+ messages)

Message-ID: <2451988.1696366652@sss.pgh.pa.us>
Permalink:  ../2451988.1696366652@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/2451988.1696366652@sss.pgh.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-docs@postgresql.org
  Cc: tgl@sss.pgh.pa.us, themyth.cs@gmail.com, pgsql-docs@lists.postgresql.org
  Subject: Re: INT4RANGE Upper bound always includes a higher number
  In-Reply-To: <2451988.1696366652@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox