Re: unnesting multirange data types
Alexander Korotkov <aekorotkov@gmail.com>
From: Alexander Korotkov <aekorotkov@gmail.com>
To: "Jonathan S. Katz" <jkatz@postgresql.org>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2021-06-10T17:24:20Z
Lists: pgsql-hackers
Attachments
- multirange_unnest.patch (application/octet-stream) patch
Hi, all! On Thu, Jun 10, 2021 at 2:00 AM Jonathan S. Katz <jkatz@postgresql.org> wrote: > On 6/9/21 4:56 PM, Alvaro Herrera wrote: > > On 2021-Jun-09, Jonathan S. Katz wrote: > > > >> I did a couple more tests around this. > >> > >> As suspected, in PL/pgSQL, there is no way to unpack or iterate over a > >> multirange type. > > > > Uh. This is disappointing; the need for some way to unnest or unpack a > > multirange was mentioned multiple times in the range_agg thread. I had > > assumed that there was some way to cast the multirange to a range array, > > or somehow convert it, but apparently that doesn't work. > > Just to be pedantic with examples: > > SELECT datemultirange( > daterange(current_date, current_date + 2), > daterange(current_date + 5, current_date + 7))::daterange[]; > > ERROR: cannot cast type datemultirange to daterange[] > LINE 1: ...2), daterange(current_date + 5, current_date + 7))::daterang... > > IF there was an array to cast it into an array, we could then use the > array looping construct in PL/pgSQL, but if we could only choose one, I > think it'd be more natural/less verbose to have an "unnest". > > > If the supporting pieces are mostly there, then I opine we should add > > something. > > Agreed. I agree that unnest(), cast to array and subscription are missing points. Proper subscription support requires expanded object handling. And that seems too late for v14. But unnset() and cast to array seems trivial. I've drafted unnest support (attached). I'm going to add also cast to the array, tests, and docs within a day. Stay tuned :) ------ 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