Re: TRUNCATE on foreign tables - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: TRUNCATE on foreign tables
Date
Msg-id 20200128040346.GC1552@paquier.xyz
Whole thread Raw
In response to Re: TRUNCATE on foreign tables  (Kohei KaiGai <kaigai@heterodb.com>)
Responses Re: TRUNCATE on foreign tables
List pgsql-hackers
On Mon, Jan 27, 2020 at 11:08:36PM +0900, Kohei KaiGai wrote:
> Hmm. Do we need to deliver another list to inform why these relations are
> trundated?

I got to think more about this one, and being able to control ONLY on
a per-relation basis would be the least surprising approach for the
commands generated.  But at least this avoids truncating a full
inheritance tree on a remote cluster even if ONLY is specified
locally.  Note that I'd like to assume that most applications have a
1:1 mapping in their schemas between a local and remote cluster, but
that's most likely not always the case ;)

> If callback is invoked with a foreign-relation that is specified by TRUNCATE
> command with ONLY, it seems to me reasonable that remote TRUNCATE
> command specifies the relation on behalf of the foreign table with ONLY.
>
> So, if ExecForeignTruncate() has another list to inform the context for each
> relation, postgres_fdw can build proper remote query that may specify the
> remote tables with ONLY-clause.

Yeah, TRUNCATE can specify ONLY on a per-table basis, so having a
second list makes sense.  Then in the FDW, just make sure to
elog(ERROR) if the lengths do no match, and then use forboth() to loop
over them.  One thing that you need to be careful about is that tables
which are added to the list because of inheritance should not be
marked with ONLY when generating the command to the remote.

> Regarding to the other comments, it's all Ok for me. I'll update the patch.
> And, I forgot "updatable" option at postgres_fdw. It should be checked on
> the truncate also, right?

Hmm.  Good point.  Being able to filter that silently through a
configuration parameter is kind of interesting.  Now I think that this
should be a separate option because updatable applies to DMLs.  Like,
truncatable?

For now, as the patch needs more work for its implementation, docs and
tests, I am marking it as returned with feedback.
--
Michael

Attachment

pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: Setting min/max TLS protocol in clientside libpq
Next
From: Craig Ringer
Date:
Subject: Re: Do we need to handle orphaned prepared transactions in the server?