Re: Add support for tuple routing to foreign partitions
Maksim Milyutin <milyutinma@gmail.com>
From: Maksim Milyutin <milyutinma@gmail.com>
To: Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>,
Robert Haas <robertmhaas@gmail.com>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>,
Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Date: 2017-10-02T12:37:17Z
Lists: pgsql-hackers
Hi Fujita-san! On 11.09.2017 16:01, Etsuro Fujita wrote: > Here is an updated version of the patch. > > * Query planning: the patch creates copies of Query/Plan with a > foreign partition as target from the original Query/Plan for each > foreign partition and invokes PlanForeignModify with those copies, to > allow the FDW to do query planning for remote INSERT with the existing > API. To make such Queries the similar way inheritance_planner does, I > modified transformInsertStmt so that the inh flag for the partitioned > table's RTE is set to true, which allows (1) expand_inherited_rtentry > to build an RTE and AppendRelInfo for each partition in the > partitioned table and (2) make_modifytable to build such Queries using > adjust_appendrel_attrs and those AppendRelInfos. > > * explain.c: I modified show_modifytable_info so that we can show > remote queries for foreign partitions in EXPLAIN for INSERT into a > partitioned table the same way as for inherited UPDATE/DELETE cases. > Here is an example: > > postgres=# explain verbose insert into pt values (1), (2); > QUERY PLAN > ------------------------------------------------------------------- > Insert on public.pt (cost=0.00..0.03 rows=2 width=4) > Foreign Insert on public.fp1 > Remote SQL: INSERT INTO public.t1(a) VALUES ($1) > Foreign Insert on public.fp2 > Remote SQL: INSERT INTO public.t2(a) VALUES ($1) > -> Values Scan on "*VALUES*" (cost=0.00..0.03 rows=2 width=4) > Output: "*VALUES*".column1 > (7 rows) > > I think I should add more explanation about the patch, but I don't > have time today, so I'll write additional explanation in the next > email. Sorry about that. Could you update your patch, it isn't applied on the actual state of master. Namely conflict in src/backend/executor/execMain.c -- Regards, Maksim Milyutin
Commits
-
Allow insert and update tuple routing and COPY for foreign tables.
- 3d956d9562aa 11.0 landed
-
Refactor PgFdwModifyState creation/destruction into separate functions.
- 870d89608e5f 11.0 landed