Re: range_agg

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: range_agg
Дата
Msg-id 15764.1583615192@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: range_agg  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: range_agg  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: range_agg  (David Fetter <david@fetter.org>)
Re: range_agg  (Robert Haas <robertmhaas@gmail.com>)
Re: range_agg  (Jeff Davis <pgsql@j-davis.com>)
Список pgsql-hackers
I wrote:
> However, what I'm on about right at the moment is that I don't think
> there should be any delta in that test at all.  As far as I can see,
> the design idea here is that multiranges will be automatically created
> over range types, and the user doesn't need to do that.  To my mind,
> that means that they're an implementation detail and should not show up as
> separately-owned objects, any more than an autogenerated array type does.

Actually ... have you given any thought to just deciding that ranges and
multiranges are the same type?  That is, any range can now potentially
contain multiple segments?  That would eliminate a whole lot of the
tedious infrastructure hacking involved in this patch, and let you focus
on the actually-useful functionality.

It's possible that this is a bad idea.  It bears a lot of similarity,
I guess, to the way that Postgres doesn't consider arrays of different
dimensionality to be distinct types.  That has some advantages but it
surely also has downsides.  I think on the whole the advantages win,
and I feel like that might also be the case here.

The gating requirement for this would be to make sure that a plain
range and a multirange can be told apart by contents.  The first idea that
comes to mind is to repurpose the allegedly-unused RANGE_xB_NULL bits in
the flag byte at the end of the datum.  If one of them is set, then it's a
multirange, and we use a different interpretation of the bytes between the
type OID and the flag byte.

Assuming that that's ok, it seems like we could consider the traditional
range functions like lower() and upper() to report on the first or last
range bound in a multirange --- essentially, they ignore any "holes"
that exist inside the range.  And the new functions for multiranges
act much like array slicing, in that they give you back pieces of a range
that aren't actually of a distinct type.

            regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jeff Davis
Дата:
Сообщение: Re: Add LogicalTapeSetExtend() to logtape.c
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Add an optional timeout clause to isolationtester step.