Re: unnesting multirange data types
Jonathan S. Katz <jkatz@postgresql.org>
From: "Jonathan S. Katz" <jkatz@postgresql.org>
To: Zhihong Yu <zyu@yugabyte.com>, Alexander Korotkov <aekorotkov@gmail.com>
Cc: Justin Pryzby <pryzby@telsasoft.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-13T15:25:05Z
Lists: pgsql-hackers
On 6/13/21 10:57 AM, Zhihong Yu wrote:
>
>
> On Sat, Jun 12, 2021 at 4:58 PM Alexander Korotkov <aekorotkov@gmail.com
> <mailto:aekorotkov@gmail.com>> wrote:
>
> On Sun, Jun 13, 2021 at 1:16 AM Jonathan S. Katz
> <jkatz@postgresql.org <mailto:jkatz@postgresql.org>> wrote:
> > On 6/12/21 5:57 PM, Alexander Korotkov wrote:
> > > On Sat, Jun 12, 2021 at 2:44 AM Alexander Korotkov
> <aekorotkov@gmail.com <mailto:aekorotkov@gmail.com>> wrote:
> > >> ()On Sat, Jun 12, 2021 at 2:30 AM Justin Pryzby
> <pryzby@telsasoft.com <mailto:pryzby@telsasoft.com>> wrote:
> > >>> On Fri, Jun 11, 2021 at 11:37:58PM +0300, Alexander Korotkov
> wrote:
> > >>>> On Fri, Jun 11, 2021 at 1:04 AM Justin Pryzby
> <pryzby@telsasoft.com <mailto:pryzby@telsasoft.com>> wrote:
> > >>>>>
> > >>>>> +{ oid => '1293', descr => 'expand mutlirange to set of ranges',
> > >>>>>
> > >>>>> typo: mutlirange
> > >>>>
> > >>>> Fixed, thanks.
> > >>>>
> > >>>> The patch with the implementation of both unnest() and cast
> to array
> > >>>> is attached. It contains both tests and docs.
> > >>>
> > >>> |+ The multirange could be explicitly cast to the array of
> corresponding
> > >>> should say: "can be cast to an array of corresponding.."
> > >>>
> > >>> |+ * Cast multirange to the array of ranges.
> > >>> I think should be: *an array of ranges
> > >>
> > >> Thank you for catching this.
> > >>
> > >>> Per sqlsmith, this is causing consistent crashes.
> > >>> I took one of its less appalling queries and simplified it to
> this:
> > >>>
> > >>> select
> > >>> pg_catalog.multirange_to_array(
> > >>> cast(pg_catalog.int8multirange() as int8multirange)) as c2
> > >>> from (select 1)x;
> > >>
> > >> It seems that multirange_to_array() doesn't handle empty
> multiranges.
> > >> I'll post an updated version of the patch tomorrow.
> > >
> > > A revised patch is attached. Now empty multiranges are handled
> > > properly (and it's covered by tests). Typos are fixed as well.
> >
> > Tested both against my original cases using both SQL + PL/pgSQL. All
> > worked well. I also tested the empty multirange case as well.
> >
> > Overall the documentation seems to make sense, I'd suggest:
> >
> > + <para>
> > + The multirange can be cast to an array of corresponding ranges.
> > + </para>
> >
> > becomes:
> >
> > + <para>
> > + A multirange can be cast to an array of ranges of the same type.
> > + </para>
>
> Thank you. This change is incorporated in the attached revision of
> the patch.
>
> This thread gave me another lesson about English articles. Hopefully,
> I would be able to make progress in future patches :)
>
> > Again, I'll defer to others on the code, but this seems to solve
> the use
> > case I presented. Thanks for the quick turnaround!
>
> Thank you for the feedback!
>
> ------
> Regards,
> Alexander Korotkov
>
>
> Hi,
> + A multirange can be cast to an array of ranges of the same type.
>
> I think 'same type' is not very accurate. It should be 'of the subtype'.
I think that's more technically correct, but it could be confusing to
the user. There is an example next to it that shows how this function
works, i.e. it returns the type of range that is represented by the
multirange.
> + ObjectAddress myself,
>
> nit: myself -> self
>
> +/* 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.
Jonathan
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