From: | Andres Freund <andres(at)anarazel(dot)de> |
---|---|
To: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
Cc: | Amit Langote <amitlangote09(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, David Rowley <david(dot)rowley(at)2ndquadrant(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>, amitdkhan(dot)pg(at)gmail(dot)com |
Subject: | Re: partition routing layering in nodeModifyTable.c |
Date: | 2019-07-19 21:17:47 |
Message-ID: | 20190719211747.367n25igfxqunz7h@alap3.anarazel.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi,
On 2019-07-19 17:11:10 -0400, Alvaro Herrera wrote:
> On 2019-Jul-19, Andres Freund wrote:
> > > - slot = ExecDelete(node, tupleid, oldtuple, planSlot,
> > > - &node->mt_epqstate, estate,
> > > + slot = ExecDelete(node, resultRelInfo, tupleid, oldtuple,
> > > + planSlot, &node->mt_epqstate, estate,
> > > true, node->canSetTag,
> > > false /* changingPart */ , NULL, NULL);
> > > break;
> >
> > This reminds me of another complaint: ExecDelete and ExecInsert() have
> > gotten more boolean parameters for partition moving, but only one of
> > them is explained with a comment (/* changingPart */) - think we should
> > do that for all.
>
> Maybe change the API to use a flags bitmask?
>
> (IMO the placement of the comment inside the function call, making the
> comma appear preceded with a space, looks ugly. If we want to add
> comments, let's put each param on its own line with the comment beyond
> the comma. That's what we do in other places where this pattern is
> used.)
Well, that's the pre-existing style, so I'd just have gone with
that. I'm not sure I buy there's much point in going for a bitmask, as
this is file-private code, not code where changing the signature
requires modifying multiple files.
> > > /* Initialize the executor state. */
> > > - estate = create_estate_for_relation(rel);
> > > + estate = create_estate_for_relation(rel, &resultRelInfo);
> >
> > Hm. It kinda seems cleaner if we were to instead return the relevant
> > index, rather than the entire ResultRelInfo, as an output from
> > create_estate_for_relation(). Makes it clearer that it's still in the
> > EState.
>
> Yeah.
>
> > Or perhaps we ought to compute it in a separate step? Then that'd be
> > more amenable to support replcating into partition roots.
>
> I'm not quite seeing the shape that you're imagining this would take.
> I vote not to mess with that for this patch; I bet that we'll have to
> change a few other things in this code when we add better support for
> partitioning in logical replication.
Yea, I think it's fine to do that separately. If we wanted to support
replication roots as replication targets, we'd obviously need to do
something pretty similar to what ExecInsert()/ExecUpdate() already
do. And there we can't just reference an index in EState, as partition
children aren't in there.
I kind of was wondering if we were to have a separate function for
getting the ResultRelInfo targeted, we'd be able to just extend that
function to support replication. But now that I think about it a bit
more, that's so much just scratching the surface...
We really ought to have the replication "sink" code share more code with
nodeModifyTable.c.
Greetings,
Andres Freund
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2019-07-19 22:47:23 | Re: should there be a hard-limit on the number of transactions pending undo? |
Previous Message | Alvaro Herrera | 2019-07-19 21:11:10 | Re: partition routing layering in nodeModifyTable.c |