Re: Schedule for 9.5alpha1 - Mailing list pgsql-hackers
From | Kouhei Kaigai |
---|---|
Subject | Re: Schedule for 9.5alpha1 |
Date | |
Msg-id | 9A28C8860F777E439AA12E8AEA7694F80110BCB4@BPXM15GP.gisp.nec.co.jp Whole thread Raw |
In response to | Schedule for 9.5alpha1 (Tom Lane <tgl@sss.pgh.pa.us>) |
List | pgsql-hackers |
> On Thu, Jun 25, 2015 at 11:55 PM, Robert Haas <robertmhaas@gmail.com> wrote: > > On Thu, Jun 25, 2015 at 6:25 PM, Kouhei Kaigai <kaigai@ak.jp.nec.com> wrote: > >> I have a serious open item reported 1.5 month ago then reminded > >> several times has not been fixed up yet. > >> > >> 9A28C8860F777E439AA12E8AEA7694F8010F3EA6@BPXM15GP.gisp.nec.co.jp > >> > >> Patch is less than 100 lines, entirely designed according to Tom's suggestion. > >> > >> The problem is, commit 1a8a4e5cde2b7755e11bde2ea7897bd650622d3e reverted > >> create_plan_recurse() to static function, thus, extension lost way to > >> transform Path node to Plan node if it wants to takes underlying child > >> nodes, like SeqScan, HashJoin and so on. > >> > >> Tom's suggestion is to add a list of Path nodes on CustomPath structure, > >> to be transformed by createplan.c, instead of public create_plan_recurse(). > >> > >> It is nearly obvious problem, and bugfix patch already exists. > > > > Yes, I am quite unhappy with this situation. Tom promised me at PGCon > > that he would look at this soon, but there is no sign that he has, and > > he said the same thing weeks ago. I think it can't be right to let > > this sit for another month or three. Even if the API you've > > implemented is worse than something Tom can design, it is certainly > > better than the status quo. I would rather have a working but > > imperfect API and have to break compatibility later in beta than have > > a non-working API. > > ...given which, I have committed this. I did not like the use of > custom_children as a generic monicker, so I changed it to > custom_paths, custom_plans, or custom_ps, as appropriate in each case. > I did a bit of cosmetic cleanup as well. > > This does seem much nicer than giving custom plans direct access to > create_plan_recurse(). The fact that you found various other places > of using those lists demonstrates that nicely. > Thanks for your help! One advantage of the approach, I think, is custom_paths list allows to implement N-way (N > 2) join more naturally than just direct accesses to create_plan_recurse(). The example below shows contents of t1, t2 and t3 are enough small to load GPU RAM, so the custom "GpuJoin" can run these 4 tables join within a single step. postgres=# explain select * from t0 natural join t1 natural join t2 natural join t3; QUERY PLAN ------------------------------------------------------------------------------------------------Custom Scan (GpuJoin) (cost=6501.77..249476.48rows=9899296 width=176) Bulkload: On (density: 100.00%) Depth 1: Logic: GpuHashJoin, HashKeys:(cid), JoinQual: (cid = cid), nrows_ratio: 0.98995197 Depth 2: Logic: GpuHashJoin, HashKeys: (aid), JoinQual: (aid= aid), nrows_ratio: 1.00000000 Depth 3: Logic: GpuHashJoin, HashKeys: (bid), JoinQual: (bid = bid), nrows_ratio: 1.00000000 -> Custom Scan (BulkScan) on t0 (cost=0.00..242855.74 rows=9999774 width=77) -> Seq Scan on t3 (cost=0.00..734.00rows=40000 width=37) -> Seq Scan on t1 (cost=0.00..734.00 rows=40000 width=37) -> Seq Scan on t2 (cost=0.00..734.00 rows=40000 width=37) (9 rows) Best regards, -- NEC Business Creation Division / PG-Strom Project KaiGai Kohei <kaigai@ak.jp.nec.com>
pgsql-hackers by date: