Re: [PATCH] use separate PartitionedRelOptions structure to storepartitioned table options - Mailing list pgsql-hackers

From Amit Langote
Subject Re: [PATCH] use separate PartitionedRelOptions structure to storepartitioned table options
Date
Msg-id CA+HiwqH4pUowF5zNgA0C2B9xrLudBb9PYVWLZAF9sa6VroiNug@mail.gmail.com
Whole thread Raw
In response to Re: [PATCH] use separate PartitionedRelOptions structure to store partitioned table options  (Nikolay Shaplov <dhyan@nataraj.su>)
Responses Re: [PATCH] use separate PartitionedRelOptions structure to store partitioned table options
List pgsql-hackers
Hi Nikolay,

Sorry for the late reply.

On Fri, Oct 11, 2019 at 7:38 PM Nikolay Shaplov <dhyan@nataraj.su> wrote:
> В Thu, 10 Oct 2019 15:50:05 +0900
> Amit Langote <amitlangote09@gmail.com> пишет:
> > > I think it is bad idea to suggest option adder to ad it to
> > > StdRdOption, we already have a big mess there. Better if he add it
> > > to an new empty structure.
> >
> > I tend to agree that this improves readability of the reloptions code
> > a bit.
> >
> > Some comments on the patch:
> >
> > How about naming the function partitioned_table_reloptions() instead
> > of partitioned_reloptions()?
>
> I have my doubts about using word table here... In relational model
> there are no such concept as "table", it uses concept "relation". And
> in postgres there were no tables, there were only relations. Heap
> relation, toast relation, all kind of index relations... I do not
> understand when and why word "table" appeared when we speak about some
> virtual relation that is made of several real heap relation. That is
> why I am not using the word table here...
>
> But since you are the author of partition table code, and this code is
> already accepted in the core, you should know better. So I will change
> it the way you say.

Sure, they're all relations in the abstract, but we've got to
distinguish different kinds in the code somehow.

Anyway, I just want the code to be consistent with what we've already
got, especially, considering that we might need similar function for
partitioned "indexes" in the future.

> > Speaking of partitioned relations vs tables, I see that you didn't
> > touch partitioned indexes (RELKIND_PARTITIONED_INDEX relations).  Is
> > that because we leave option handling to the index AMs?
>
> Because for partitioned indexes the code says "Use same options
> original index does"
>
> bytea *
> extractRelOptions(HeapTuple tuple, TupleDesc tupdesc,
>                   amoptions_function amoptions)
> {
> ............
>     switch (classForm->relkind)
>     {
>         case RELKIND_RELATION:
>         case RELKIND_TOASTVALUE:
>         case RELKIND_MATVIEW:
>             options = heap_reloptions(classForm->relkind, datum, false);
>             break;
>         case RELKIND_PARTITIONED_TABLE:
>             options = partitioned_table_reloptions(datum, false);
>             break;
>         case RELKIND_VIEW:
>             options = view_reloptions(datum, false);
>             break;
>         case RELKIND_INDEX:
>         case RELKIND_PARTITIONED_INDEX:
>             options = index_reloptions(amoptions, datum, false);
>             break;
>
>
> Here you see the function accepts amoptions method that know how to
> parse options for a particular index, and passes it to index_reloptions
> functions. For both indexes and partitioned indexes it is taken from AM
> "method" amoptions. So options uses exactly the same code and same
> options both for indexes and for partitioned indexes.
>
> I do not know if it is correct from global point of view, but from the
> point of view of reloptions engine, it does not require any attention:
> change index options and get partitioned_index options for free...
>
> Actually I would expect some problems there, because sooner or later,
> somebody would want to set custom fillfactor to partitioned table, or
> set some custom autovacuum options for it.

Yeah, I have never run into this code before, but this might need
revisiting, if only to be consistent with the table counterpart.

> But I would prefer to think
> about it when I am done with reloption engine rewriting... Working in
> both direction will cause more trouble then get benefits...

Sure, this seems like a topic for another thread.

I looked atthe v2 patch and noticed a typo:

+ *     Binary representation of relation options for rtitioned tables.

s/rtitioned/partitioned/g

Other than that, looks good.

Thanks,
Amit



pgsql-hackers by date:

Previous
From: Amit Langote
Date:
Subject: Re: [PATCH] Do not use StdRdOptions in Access Methods
Next
From: Amit Langote
Date:
Subject: Re: Obsolete comment in partbounds.c