Re: [HACKERS] Multi column range partition table - Mailing list pgsql-hackers

From Dean Rasheed
Subject Re: [HACKERS] Multi column range partition table
Date
Msg-id CAEZATCUZO4=0WUvrGe=DJj4F7Kos-FkXnH6Xs9eVcrYOPg9z_g@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] Multi column range partition table  (Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>)
Responses Re: [HACKERS] Multi column range partition table
Re: [HACKERS] Multi column range partition table
List pgsql-hackers
On 11 July 2017 at 13:29, Ashutosh Bapat
<ashutosh.bapat@enterprisedb.com> wrote:
> +     <para>
> +      Also note that some element types, such as <literal>timestamp</>,
> +      have a notion of "infinity", which is just another value that can
> +      be stored. This is different from <literal>MINVALUE</> and
> +      <literal>MAXVALUE</>, which are not real values that can be stored,
> +      but rather they are ways of saying the value is unbounded.
> +      <literal>MAXVALUE</> can be thought of as being greater than any
> +      other value, including "infinity" and <literal>MINVALUE</> as being
> +      less than any other value, including "minus infinity". Thus the range
> +      <literal>FROM ('infinity') TO (MAXVALUE)</> is not an empty range; it
> +      allows precisely one value to be stored — the timestamp
> +      "infinity".
>       </para>
>
> The description in this paragraph seems to be attaching intuitive
> meaning of word "unbounded" to MAXVALUE and MINVALUE, which have
> different intuitive meanings of themselves. Not sure if that's how we
> should describe MAXVALUE/MINVALUE.
>

I'm not sure I understand your point. MINVALUE and MAXVALUE do mean
unbounded below and above respectively. This paragraph is just making
the point that that isn't the same as -/+ infinity.


> Most of the patch seems to be replacing "content" with "kind",
> RangeDatumContent with PartitionRangeDatumKind  and RANGE_DATUM_FINITE
> with PARTITION_RANGE_DATUM_VALUE. But those changes in name don't seem
> to be adding much value to the patch. Replacing RANGE_DATUM_NEG_INF
> and RANGE_DATUM_POS_INF with PARTITION_RANGE_DATUM_MINVALUE and
> PARTITION_RANGE_DATUM_MAXVALUE looks like a good change in line with
> MINVALUE/MAXVALUE change. May be we should reuse the previous
> variables, enum type name and except those two, so that the total
> change introduced by the patch is minimal.
>

No, this isn't just renaming that other enum. It's about replacing the
boolean "infinite" flag on PartitionRangeDatum with something that can
properly enumerate the 3 kinds of PartitionRangeDatum that are allowed
(and, as noted above "finite"/"infinite isn't the right terminology
either). Putting that new enum in parsenodes.h makes it globally
available, wherever the PartitionRangeDatum structure is used. A
side-effect of that change is that the old RangeDatumContent enum that
was local to partition.c is no longer needed.

RangeDatumContent wouldn't be a good name for a globally visible enum
of this kind because that name fails to link it to partitioning in any
way, and could easily be confused as having something to do with RTEs
or range types. Also, the term "content" is more traditionally used in
the Postgres sources for a field *holding* content, rather than a
field specifying the *kind* of content. On the other hand, you'll note
that the term "kind" is by far the most commonly used term for naming
this kind of enum, and any matching fields.

IMO, code consistency and readability takes precedence over keeping
patch sizes down.

Regards,
Dean



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: [HACKERS] Domains and arrays and composites, oh my
Next
From: Jeff Janes
Date:
Subject: Re: [HACKERS] why not parallel seq scan for slow functions