What is the difference between:
select foo();
and
select * from foo();
Foo is defined as:
CREATE OR REPLACE FUNCTION foo()
RETURNS SETOF integer AS
'SELECT column from foo_table;'
LANGUAGE 'sql' STABLE;
Explain shows difference...
explain select * from foo()
"Function Scan on foo (cost=0.00..1.25 rows=1000 width=4)"
Explain select foo();
"Result (cost=0.00..0.00 rows=1 width=0)"
They both return the same results..yet yield different plans...and different speeds when using 'real' data.
Why come?