Re: Custom Plan node - Mailing list pgsql-hackers

From Robert Haas
Subject Re: Custom Plan node
Date
Msg-id CA+TgmoYM6ukZe_6nwgCpdT3AQ_y8fPhaUc4hV2rkqPH3yqZYCQ@mail.gmail.com
Whole thread Raw
In response to Re: Custom Plan node  (Kohei KaiGai <kaigai@kaigai.gr.jp>)
Responses Re: Custom Plan node
List pgsql-hackers
On Tue, Sep 10, 2013 at 11:45 PM, Kohei KaiGai <kaigai@kaigai.gr.jp> wrote:
>> Fair enough, I think.  So the action item for KaiGai is to think of
>> how the planner integration might work.
>>
> Do you think the idea I mentioned at the upthread is worth to investigate
> for more detailed consideration? Or, does it seems to you short-sighted
> thinking to fit this infrastructure with planner?
>
> It categorizes plan node into three: join, scan and other stuff.
> Cost based estimation is almost applied on join and scan, so abstracted
> scan and join may make sense to inform core planner what does this
> custom plan node try to do.
> On the other hand, other stuff, like Agg, is a stuff that must be added
> according to the provided query, even if its cost estimation was not small,
> to perform as the provided query described.
> So, I thought important one is integration of join and scan, but manipulation
> of plan tree for other stuff is sufficient.
>
> How about your opinion?

Well, I don't know that I'm smart enough to predict every sort of
thing that someone might want to do here, unfortunately.  This is a
difficult area: there are many possible things someone might want to
do, and as Tom points out, there's a lot of special handling of
particular node types that can make things difficult.  And I can't
claim to be an expert in this area.

That having been said, I think the idea of a CustomScan node is
probably worth investigating.  I don't know if that would work out
well or poorly, but I think it would be worth some experimentation.
Perhaps you could have a hook that gets called for each baserel, and
can decide whether or not it wishes to inject any additional paths;
and then a CustomScan node that could be used to introduce such paths.I've been thinking that we really ought to have
theability to
 
optimize CTID range queries, like SELECT * FROM foo WHERE ctid > 'some
constant'.  We have a Tid Scan node, but it only handles equalities,
not inequalities.  I suppose this functionality should really be in
core, but since it's not it might make an interesting test for the
infrastructure you're proposing.  You may be able to think of
something else you like better; it's just a thought.

I am a little less sanguine about the chances of a CustomJoin node
working out well.  I agree that we need something to handle join
pushdown, but it seems to me that might be done by providing a Foreign
Scan path into the joinrel rather than by adding a concept of foreign
joins per se.  There are other possible new join types, like the Range
Join that Jeff Davis has mentioned in the past, which might be
interesting.  But overall, I can't see us adding very many more join
types, so I'm not totally sure how much extensibility would help us
here.  We've added a few scan types over the years (index only scans
in 9.2, and bitmap index scans in 8.1, I think) but all of our
existing join types go back to time immemorial.

And I think that lumping everything else together under "not a scan or
join" has the least promise of all.  Is replacing Append really the
same as replacing Sort?  I think we'll need to think harder here about
what we're trying to accomplish and how to get there.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Kevin Grittner
Date:
Subject: Re: record identical operator
Next
From: Robert Haas
Date:
Subject: Re: proposal: Set effective_cache_size to greater of .conf value, shared_buffers