Re: TRUNCATE on foreign table
Fujii Masao <masao.fujii@oss.nttdata.com>
From: Fujii Masao <masao.fujii@oss.nttdata.com>
To: Kohei KaiGai <kaigai@heterodb.com>
Cc: Kazutaka Onishi <onishi@heterodb.com>,
Amit Langote <amitlangote09@gmail.com>, Ibrar Ahmed <ibrar.ahmad@gmail.com>,
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>,
Zhihong Yu <zyu@yugabyte.com>,
PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>,
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Date: 2021-03-30T06:29:33Z
Lists: 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
Commits
-
doc: Review for "Allow TRUNCATE command to truncate foreign tables".
- 0c8f40863acb 14.0 landed
-
Don't pass "ONLY" options specified in TRUNCATE to foreign data wrapper.
- 8e9ea08bae93 14.0 landed
-
Support tab-complete for TRUNCATE on foreign tables.
- 81e094bdfdd6 14.0 landed
-
Allow TRUNCATE command to truncate foreign tables.
- 8ff1c94649f5 14.0 landed
-
Add support for asynchronous execution.
- 27e1f14563cf 14.0 cited