Thread: Planner question regarding functions

Planner question regarding functions

From
Chris Travers
Date:
Hi all;

I suspect I know what the answer here is, but I thought I would ask
anyway.  How transparent are SQL language functions from the planner's
perspective?  For example if I create a table:

CREATE TABLE proof_of_concept(
    poc_id serial primary key,
    testing text
);
and a function:

CREATE FUNCTION search_poc() RETURNS setof proof_of_concept AS '
    SELECT * FROM proof_of_concept
' LANGUAGE SQL;

Then will the planner be able to use indexes if I do:
SELECT * FROM search_poc() WHERE poc_id = 16023

I am assuming it won't.  But can the planner "see inside" the SQL
language functions, thus expanding them similar to a view, or will this
force a sequential scan?

Best Wishes,
Chris Travers


Re: Planner question regarding functions

From
Bruno Wolff III
Date:
On Mon, Dec 08, 2003 at 21:33:48 +0800,
  Chris Travers <chris@travelamericas.com> wrote:
>
> I suspect I know what the answer here is, but I thought I would ask
> anyway.  How transparent are SQL language functions from the planner's
> perspective?  For example if I create a table:

In 7.4 simple SQL functions are inlined and work a lot like macros.
I don't know if set returning functions are able to be inlined.

Re: Planner question regarding functions

From
Tom Lane
Date:
Bruno Wolff III <bruno@wolff.to> writes:
>   Chris Travers <chris@travelamericas.com> wrote:
>> I suspect I know what the answer here is, but I thought I would ask
>> anyway.  How transparent are SQL language functions from the planner's
>> perspective?  For example if I create a table:

> In 7.4 simple SQL functions are inlined and work a lot like macros.
> I don't know if set returning functions are able to be inlined.

They are not.  I suppose that a function consisting of just one SELECT
could be expanded in-line if it appears in FROM ... but it's not clear
what that accomplishes that you couldn't do just as well with a view.

            regards, tom lane