CREATE OR REPLACE PROCEDURE testscan ()
LANGUAGE plpgsql
AS $func$
DECLARE
s text;
BEGIN
EXECUTE 'explain analyze SELECT from tenk1' INTO s;
EXECUTE 'explain analyze SELECT from tenk1' INTO s;
END;
$func$;
the following way works fine. But I want to wrapped it in a transaction, so that I can see the number of seq_scans this procedure have executed.
SELECT seq_scan,last_seq_scan,seq_tup_read
FROM pg_stat_user_tables
WHERE schemaname = 'public' AND relname = 'tenk1';
CALL testscan ();
SELECT seq_scan,last_seq_scan,seq_tup_read
FROM pg_stat_user_tables
WHERE schemaname = 'public' AND relname = 'tenk1';
but the following way not working as I intended.
BEGIN;
SELECT seq_scan,last_seq_scan,seq_tup_read
FROM pg_stat_user_tables
WHERE schemaname = 'public' AND relname = 'tenk1';
CALL testscan ();
SELECT seq_scan,last_seq_scan,seq_tup_read
FROM pg_stat_user_tables
WHERE schemaname = 'public' AND relname = 'tenk1';
COMMIT;
wrapped in transaction, before and after call testscan(), returns same number of seq_scan.
question: how to measure, how many seq_scans one procedure executed on a specific table.