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: