Re: BUG #16631: postgres_fdw tries to insert into generated columns

From: Etsuro Fujita <etsuro(dot)fujita(at)gmail(dot)com>
To: Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, dacherny(at)gmail(dot)com, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #16631: postgres_fdw tries to insert into generated columns
Date: 2021-07-15 09:15:24
Message-ID: CAPmGK16h+YBidb3MXdZWbJQYNL0AsHT7+0-H5Or0_QwksORh=A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Tue, Jul 13, 2021 at 5:36 AM Peter Eisentraut
<peter(dot)eisentraut(at)enterprisedb(dot)com> wrote:
> On 07.07.21 17:54, Tom Lane wrote:
> > Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> writes:
> >> On 07.07.21 09:20, Etsuro Fujita wrote:
> >>> * Modified nodeModifyTable.c and copyfrom.c so that they don't compute
> >>> generated columns for FDWs anymore.
> >
> >> I don't agree with that change. What is the point of declaring a
> >> generated column on a foreign table if you ignore it? Then you might as
> >> well prohibit declaring such columns in the first place.
> >
> > Maybe what we need here is some documentation clarifying exactly what
> > the point of a generated column on a foreign table actually *is*.
> > When would you do it, and what relationship if any has it got to the
> > generation status of the underlying remote column?
>
> The behavior is explained here:
> https://www.postgresql.org/docs/current/sql-createforeigntable.html
>
> If you have a foreign table with a column "a" and a column "b" generated
> as (a * 2), and say the underlying storage is a flat file, then the
> generated value is computed by the server and written to the file. The
> file behaves essentially analogous to the regular table heap file.
>
> The way I understand this bug report is, what if the underlying storage
> is another SQL database with its own generated columns. Then how do we
> manage it so that IMPORT FOREIGN SCHEMA can mark the foreign table
> column as "column exists to be read, but don't write to it". The
> proposal was to repurpose the generated column syntax for that, but that
> breaks the flat-file use case above.

I think this may also depend on the FDW implementation.

> The follow-up proposal was to let the FDW implementation decide. I
> don't think that is always the right thing either. What if I want the
> foreign-table node to do the computations, because it has access to
> special parameters or something.

The follow-up proposal was mainly for consistency with the handling of
constraints on foreign tables; they are not enforced on the local PG
server at all, as noted in the above documentation.

> There might be multiple possibilities of what is appropriate here. But
> that's not something we can just change around as part of a bug fix.

I agree on this part. The changes I made to the core side would go
beyond a fix for the reported issue. I'll remove it in the next
version of the patch.

Best regards,
Etsuro Fujita

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Etsuro Fujita 2021-07-15 09:35:33 Re: BUG #16583: merge join on tables with different DB collation behind postgres_fdw fails
Previous Message Marcin Krupowicz 2021-07-15 08:59:38 Re: BUG #17103: WAL segments are not removed after exceeding max_slot_wal_keep_size