Re: unnesting multirange data types
Alexander Korotkov <aekorotkov@gmail.com>
From: Alexander Korotkov <aekorotkov@gmail.com>
To: "Jonathan S. Katz" <jkatz@postgresql.org>
Cc: Justin Pryzby <pryzby@telsasoft.com>, Zhihong Yu <zyu@yugabyte.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-06-13T21:18:48Z
Lists: pgsql-hackers
On Sun, Jun 13, 2021 at 9:46 PM Jonathan S. Katz <jkatz@postgresql.org> wrote: > > On 6/13/21 11:49 AM, Justin Pryzby wrote: > > On Sun, Jun 13, 2021 at 11:25:05AM -0400, Jonathan S. Katz wrote: > >> On 6/13/21 10:57 AM, Zhihong Yu wrote: > >>> +/* Turn multirange into a set of ranges */ > >>> > >>> set of ranges: sequence of ranges > >> > >> I believe "set of ranges" is accurate here, as the comparable return is > >> a "SETOF rangetype". Sequences are objects unto themselves. > >> > > > > I believe the point was that (in mathematics) a "set" is unordered, and a > > sequence is ordered. Also, a "setof" tuples in postgres can contain > > duplicates. > > The comment in question is part of the header for the > "multirange_unnest" function in the code and AFAICT it is accurate: it > is returning a "set of" ranges as it's literally calling into the > set-returning function framework. > > I would suggest leaving it as is. +1 > > The docs say "The ranges are read out in storage order (ascending).", so I > > think this is just a confusion between what "set" means in math vs in postgres. > > This is nearly identical to the language in the array unnest[1] > function, which is what I believed Alexander borrowed from: Yes, that's it! :) > "Expands an array into a set of rows. The array's elements are read out > in storage order." > > If we tweaked the multirange "unnest" function, we could change it to: > > + <para> > + Expands a multirange into a set of rows. > + The ranges are read out in storage order (ascending). > + </para> > > to match what the array "unnest" function docs, or > > + <para> > + Expands a multirange into a set of rows that each > + contain an individual range. > + The ranges are read out in storage order (ascending). > + </para> > > to be a bit more specific. However, I think this is also bordering on > overengineering the text, given there has been a lack of feedback on the > "unnest" array function description being confusing. I think it's not necessarily to say about rows here. Our documentation already has already a number of examples, where we describe set of returned values without speaking about rows including: json_array_elements, json_array_elements_text, json_object_keys, pg_listening_channels, pg_tablespace_databases... ------ Regards, Alexander Korotkov
Commits
-
Fix small inconsistencies in catalog definition of multirange operators
- 4d39d4e639b4 14.0 landed
- 768ea9bcf981 15.0 landed
-
Revert 29854ee8d1 due to buildfarm failures
- 817bb0a7d1e0 14.0 landed
-
Copy-edit text for the pg_terminate_backend() "timeout" parameter.
- 0aac73e6a260 14.0 cited
-
Add missing pg_description strings for pg_type entries.
- b09a64d602a1 12.0 cited
-
Fix pg_description entries for jsonb_to_record() and jsonb_to_recordset().
- a4627e8fd479 9.6.0 cited
-
docs: clarify JSONB operator descriptions
- b852dc4cbd09 9.6.0 cited
-
Set procost to 10 for each of the pg_foo_is_visible() functions.
- a80889a7359e 9.3.0 cited
-
Make use of LATERAL in information_schema.sequences view.
- c246eb5aafe6 9.3.0 cited
-
Add pg_trigger_depth() function
- 74ab96a45ef6 9.2.0 cited
-
Add database comments to template0 and postgres databases, and improve
- ddd6ff289f25 9.1.0 cited