Re: TRUNCATE on foreign table - Mailing list pgsql-hackers
From | Kohei KaiGai |
---|---|
Subject | Re: TRUNCATE on foreign table |
Date | |
Msg-id | CAOP8fzZyfDcY3kWUtRL2gibynsNvG6A3n2qivipGt+gmPFRRaQ@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
|
List | pgsql-hackers |
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? Best regards, -- HeteroDB, Inc / The PG-Strom Project KaiGai Kohei <kaigai@heterodb.com>
pgsql-hackers by date: