Qingqing Zhou wrote:
> I don't quite understand the difference between a SQL function and a
> PL/PgSQL function here - since there is a overlapped functionality that we
> could implement by SQL function or by PL/PgSQL function.
The difference is between an inlined function (which is integrated
directly into the plan of the query that invokes it) and a function that
is not inlined. Only SQL functions can be inlined, and only some SQL
functions at that. With an out-of-line function, we just invoke the
function via the fmgr infrastructure -- if it chooses to create any
plans (e.g. via SPI), that is its own business, and they would be
treated as distinct plans by the cache module.
-Neil