Re: problem with RETURNING and update row movement

From: Etsuro Fujita <etsuro(dot)fujita(at)gmail(dot)com>
To: Amit Langote <amitlangote09(at)gmail(dot)com>
Cc: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: problem with RETURNING and update row movement
Date: 2020-09-20 14:40:52
Message-ID: CAPmGK16CZy1ymHOWLGhnPM4MA3YEHE8UU-a15bV92SCc+STAqQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Sep 14, 2020 at 10:45 PM Amit Langote <amitlangote09(at)gmail(dot)com> wrote:
> On Mon, Sep 14, 2020 at 5:56 PM Etsuro Fujita <etsuro(dot)fujita(at)gmail(dot)com> wrote:
> > IIUC, I think two issues are discussed in the thread [1]: (a) there is
> > currently no way to define the set of meaningful system columns for a
> > partitioned table that contains pluggable storages other than standard
> > heap, and (b) even in the case where the set is defined as before,
> > like partitioned tables that don’t contain any pluggable storages,
> > system column values are not obtained from a tuple inserted into a
> > partitioned table in cases as reported in [1], because virtual slots
> > are assigned for partitioned tables [2][3]. (I think the latter is
> > the original issue in the thread, though.)
>
> Right, (b) can be solved by using a leaf partition's tuple slot as
> proposed.

You mean what is proposed in [3]?

> > I think we could fix this update-tuple-routing-vs-RETURNING issue
> > without the fix for (a). But to transfer system column values in a
> > cleaner way, I think we need to fix (b) first so that we can always
> > obtain/copy them from the new tuple moved to another partition by
> > INSERT following DELETE.
>
> Yes, I think you are right. Although, I am still not sure how to
> "copy" system columns from one partition's slot to another's, that is,
> without assuming what they are.

I just thought we assume that partitions support all the existing
system attributes until we have the fix for (a), i.e., the slot
assigned for a partition must have the getsysattr callback routine
from which we can fetch each existing system attribute of a underlying
tuple in the slot, regardless of whether that system attribute is used
for the partition or not.

> > (I think we could address this issue for v11 independently of [1], off course.)
>
> Yeah.

I noticed that I modified your patch incorrectly. Sorry for that.
Attached is an updated patch fixing that. I also added a bit of code
to copy CTID from the new tuple moved to another partition, not just
table OID, and did some code/comment adjustments, mainly to match
other places. I also created a patch for PG11, which I am attaching
as well.

Best regards,
Etsuro Fujita

Attachment Content-Type Size
v5-0001-Fix-a-bug-with-RETURNING-when-UPDATE-moves-tuple-HEAD.patch application/octet-stream 10.5 KB
v5-0001-Fix-a-bug-with-RETURNING-when-UPDATE-moves-tuple-PG11.patch application/octet-stream 10.2 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dmitry Dolgov 2020-09-20 15:46:52 Re: [HACKERS] [PATCH] Generic type subscripting
Previous Message Peter Eisentraut 2020-09-20 13:46:29 Re: VACUUM PARALLEL option vs. max_parallel_maintenance_workers