On 04/01/2018 06:02 AM, pinker wrote:
> I mean this part describing track_function:
>
> https://www.postgresql.org/docs/10/static/runtime-config-statistics.html
>
> Enables tracking of function call counts and time used. Specify pl to track
> only procedural-language functions, all to also track SQL and C language
> functions. The default is none, which disables function statistics tracking.
> Only superusers can change this setting.
>
> Note
> SQL-language functions that are simple enough to be “inlined” into the
> calling query will not be tracked, regardless of this setting.
>
> Only case described here, that exclude function from being tracked it's
> inlining, not the time and not the place in the query.
The below might help:
https://wiki.postgresql.org/wiki/Inlining_of_SQL_functions
In particular for your second case(place in query):
" Table functions
A table function call is any instance where func(args) appears where a
table is expected. (This is, for most functions, a PostgreSQL extension
to the SQL standard.) For example:
select * from func(123);
"
For your first case:
Inlining conditions for scalar functions
"the function body consists of a single, simple, SELECT expression"
So from your OP:
CREATE FUNCTION a(a bigint)
RETURNS bigint
STABLE
LANGUAGE SQL
AS $$
SELECT $1
$$;
If you change to:
CREATE FUNCTION a(a bigint)
RETURNS bigint
STABLE
LANGUAGE SQL
AS $$
SELECT 'test';
SELECT $1
$$;
then before change:
test=> select * from pg_stat_user_functions ;
funcid | schemaname | funcname | calls | total_time | self_time
---------+------------+----------+-------+------------+-----------
1386647 | public | a | 2 | 1251.598 | 1251.598
(1 row)
after change:
test=> select * from pg_stat_user_functions ;
funcid | schemaname | funcname | calls | total_time | self_time
---------+------------+----------+-------+------------+-----------
1386647 | public | a | 3 | 1251.682 | 1251.682
> So I would expect that pg_stat_user_function will show me that my function
> was executed. Good that are other ways to do it, but changing
> track_functions to 'all' I would expect all calls will be tracked...
>
>
>
> --
> Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com