Thread: Planner question regarding functions
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
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.
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