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

From Bharath Rupireddy
Subject Re: TRUNCATE on foreign table
Date
Msg-id CALj2ACUvuYrCi7G54Yov0oc_D9Zz6O157mtru72J-zxYYWf_3w@mail.gmail.com
Whole thread Raw
In response to Re: TRUNCATE on foreign table  (Fujii Masao <masao.fujii@oss.nttdata.com>)
Responses Re: TRUNCATE on foreign table  (Fujii Masao <masao.fujii@oss.nttdata.com>)
List pgsql-hackers
On Fri, Apr 16, 2021 at 8:24 AM Fujii Masao <masao.fujii@oss.nttdata.com> wrote:
> We are still discussing whether RESTRICT option should be pushed down to
> a foreign data wrapper. But ISTM at least we could reach the consensus about
> the drop of extra information for each foreign table. So what about applying
> the attached patch and remove the extra information at first?

Thanks for the patch, here are some comments:

1) Maybe new empty lines would be better so that the code doesn't look
cluttered:
        relids = lappend_oid(relids, myrelid);   --> a new line after this.
        /* Log this relation only if needed for logical decoding */
        if (RelationIsLogicallyLogged(rel))

        relids = lappend_oid(relids, childrelid);  --> a new line after this.
        /* Log this relation only if needed for logical decoding */

        relids = lappend_oid(relids, relid);  --> a new line after this.
        /* Log this relation only if needed for logical decoding */
        if (RelationIsLogicallyLogged(rel))

2) Instead of
     on foreign tables.  <literal>rels</literal> is the list of
     <structname>Relation</structname> data structure that indicates
     a foreign table to truncate.

I think it is better with:
     on foreign tables.  <literal>rels</literal> is the list of
     <structname>Relation</structname> data structures, where each
     entry indicates a foreign table to truncate.

3) How about adding an extra para(after below para in
postgres_fdw.sgml) on WHY we don't push "ONLY" to foreign tables while
truncating? We could add to the same para for other options if at all
we don't choose to push them.
  <command>DELETE</command>, or <command>TRUNCATE</command>.
  (Of course, the remote user you have specified in your user mapping must
  have privileges to do these things.)

4) Isn't it better to mention the "ONLY" option is not pushed to remote
-- truncate with ONLY clause
TRUNCATE ONLY tru_ftable_parent;

TRUNCATE ONLY tru_ftable;        -- truncate both parent and child
SELECT count(*) FROM tru_ftable;   -- 0

5) I may be missing something here, why is even after ONLY is ignored
in the below truncate command, the sum is 126? Shouldn't it truncate
both tru_ftable_parent and
-- truncate with ONLY clause
TRUNCATE ONLY tru_ftable_parent;
SELECT sum(id) FROM tru_ftable_parent;  -- 126

With Regards,
Bharath Rupireddy.
EnterpriseDB: http://www.enterprisedb.com



pgsql-hackers by date:

Previous
From: "Joel Jacobson"
Date:
Subject: Re: Schema variables - new implementation for Postgres 15
Next
From: Michael Paquier
Date:
Subject: Re: Table refer leak in logical replication