On 2017/07/26 22:39, Robert Haas wrote:
> On Wed, Jun 14, 2017 at 10:40 PM, Etsuro Fujita
> <fujita.etsuro@lab.ntt.co.jp> wrote:
>> Attached is an updated version of the patch.
>
> Well, now I'm confused:
>
> * Initialize the junk filter(s) if needed. INSERT queries need a filter
> * if there are any junk attrs in the tlist. UPDATE and DELETE always
> * need a filter, since there's always a junk 'ctid' or 'wholerow'
> - * attribute present --- no need to look first.
> + * attribute present if not foreign table, and if foreign table, there
> + * are always junk attributes present the FDW needs to identify the exact
> + * row to update or delete --- no need to look first. For foreign tables,
> + * there's also a wholerow attribute when the relation has a row-level
> + * trigger on UPDATE/DELETE but not on INSERT.
>
> So the first part of the change weakens the assertion that a 'ctid' or
> 'wholerow' attribute will always be present by saying that an FDW may
> instead have other attributes sufficient to identify the row.
That's right.
> But
> then the additional sentence says that there will be a 'wholerow'
> attribute after all. So this whole change seems to me to be going
> around in a circle.
What I mean by the additional one is: if the result table that is a
foreign table has a row-level UPDATE/DELETE trigger, a 'wholerow' will
also be present. So, if the result table didn't have the trigger, there
wouldn't be 'whole-row', so in that case it could be possible that there
would be only attributes other than 'ctid' and 'wholerow'.
Best regards,
Etsuro Fujita