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

From Fujii Masao
Subject Re: TRUNCATE on foreign table
Date
Msg-id 083f82e6-818a-b758-162b-6152ffa9224e@oss.nttdata.com
Whole thread Raw
In response to Re: TRUNCATE on foreign table  (Kohei KaiGai <kaigai@heterodb.com>)
List pgsql-hackers

On 2021/03/30 10:11, Kohei KaiGai wrote:
> 2021年3月30日(火) 3:45 Fujii Masao <masao.fujii@oss.nttdata.com>:
>>
>> On 2021/03/28 2:37, Kazutaka Onishi wrote:
>>> Fujii-san,
>>>
>>> Thank you for your review!
>>> Now I prepare v5 patch and I'll answer to your each comment. please
>>> check this again.
>>> m(_ _)m
>>>
>>> 1. In postgres-fdw.sgml, "and truncatable" should be appended into the
>>> above first description?
>>> 2. truncate.sgml should be updated because, for example, it contains
>>> the above descriptions.
>>>
>>> Yeah, you're right. I've fixed it.
>>>
>>>
>>>
>>> 3.  Don't we need to document the detail information about frels_extra?
>>>
>>> I've written about frels_extra into fdwhander.sgml.
>>>
>>>
>>>
>>> 4. postgres_fdw determines whether to specify ONLY or not by checking
>>> whether the passed extra value is zero or not.
>>>
>>> Please refer this:
>>> https://www.postgresql.org/message-id/CAOP8fzb-t3WVNLjGMC%2B4sV4AZa9S%3DMAQ7Q6pQoADMCf_1jp4ew%40mail.gmail.com
>>>> Negative value means that foreign-tables are not specified in the TRUNCATE
>>>> command, but truncated due to dependency (like partition's child leaf).
>>>
>>> I've added this information into fdwhandler.sgml.
>>
>> Even when a foreign table is specified explicitly in TRUNCATE command,
>> its extra value can be negative if it's found as an inherited children firstly
>> (i.e., in the case where the partitioned table having that foreign table as
>> its partition is specified explicitly in TRUNCATE command).
>> Isn't this a problem?
>>
>> Please imagine the following example;
>>
>> ----------------------------------
>> create extension postgres_fdw;
>> create server loopback foreign data wrapper postgres_fdw;
>> create user mapping for public server loopback;
>>
>> create table t (i int, j int) partition by hash (j);
>> create table t0 partition of t for values with (modulus 2, remainder 0);
>> create table t1 partition of t for values with (modulus 2, remainder 1);
>>
>> create table test (i int, j int) partition by hash (i);
>> create table test0 partition of test for values with (modulus 2, remainder 0);
>> create foreign table ft partition of test for values with (modulus 2, remainder 1) server loopback options
(table_name't');
 
>> ----------------------------------
>>
>> In this example, "truncate ft, test" works fine, but "truncate test, ft" causes
>> an error though they should work in the same way basically.
>>
> (Although it was originally designed by me...)
> If frels_extra would be a bit-masked value, we can avoid the problem.
> 
> Please assume the three labels below:
> #define TRUNCATE_REL_CONTEXT__NORMAL         0x01
> #define TRUNCATE_REL_CONTEXT__ONLY               0x02
> #define TRUNCATE_REL_CONTEXT__CASCADED     0x04
> 
> Then, assign these labels on the extra flag according to the context where
> the foreign-tables appeared in the truncate command.
> Even if it is specified multiple times in the different context, FDW extension
> can handle the best option according to the flags.
> 
>> In this example, "truncate ft, test" works fine, but "truncate test, ft" causes
> 
> In both cases, ExecForeignTruncate shall be invoked to "ft" with
> (NORMAL | CASCADED),
> thus, postgres_fdw can determine the remote truncate command shall be
> executed without "ONLY" clause.
> 
> How about the idea?

This idea looks better to me.

Regards,

-- 
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION



pgsql-hackers by date:

Previous
From: Bharath Rupireddy
Date:
Subject: Re: Redundant errdetail prefix "The error was:" in some logical replication messages
Next
From: Markus Wanner
Date:
Subject: Re: [PATCH] add concurrent_abort callback for output plugin