--
-- pgstat_opt_concurrent_reset
--
setup
{
DROP TABLE IF EXISTS t_pgstat_iso;
CREATE TABLE t_pgstat_iso(id int primary key, val int);
DROP FUNCTION IF EXISTS f_pgstat_iso(int);
CREATE OR REPLACE FUNCTION f_pgstat_iso(i int) RETURNS int AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
}
teardown
{
DROP TABLE t_pgstat_iso;
DROP FUNCTION f_pgstat_iso(int);
}
session "s1"
setup { BEGIN; SET track_counts = on; }
step "s1i" { INSERT INTO t_pgstat_iso VALUES (1,1); }
step "s1c" { COMMIT; }
session "s2"
setup { BEGIN; SET track_counts = on; }
step "s2i" { INSERT INTO t_pgstat_iso VALUES (2,2); }
step "s2c" { COMMIT; }
session "s3"
setup { SET track_counts = on; SET track_functions = all; }
step "s3call" { DO $$ BEGIN PERFORM f_pgstat_iso(1); END $$; }
step "s3resetdb" { DO $$ BEGIN PERFORM pg_stat_reset(); END $$; }
step "s3resettab" { DO $$ BEGIN PERFORM pg_stat_reset_single_table_counters('t_pgstat_iso'::regclass); END $$; }
step "s3resetfunc" { DO $$ BEGIN PERFORM pg_stat_reset_single_function_counters('f_pgstat_iso(int)'::regprocedure); END $$; }
step "s3assert" {
DO $$
DECLARE
v_rows int;
v_tab_ins bigint;
v_func_calls bigint;
BEGIN
SELECT count(*) INTO v_rows FROM t_pgstat_iso;
IF v_rows <> 2 THEN
RAISE EXCEPTION 'unexpected row count in t_pgstat_iso: %, expected 2', v_rows;
END IF;
SELECT COALESCE((SELECT n_tup_ins FROM pg_stat_user_tables WHERE relname='t_pgstat_iso'), 0)
INTO v_tab_ins;
IF v_tab_ins < 0 THEN
RAISE EXCEPTION 'unexpected negative n_tup_ins: %', v_tab_ins;
END IF;
SELECT COALESCE((SELECT calls FROM pg_stat_user_functions WHERE funcname='f_pgstat_iso'), 0)
INTO v_func_calls;
IF v_func_calls < 0 THEN
RAISE EXCEPTION 'unexpected negative function calls: %', v_func_calls;
END IF;
END;
$$;
}
permutation "s1i" "s2i" "s3call" "s3resetdb" "s3resettab" "s3resetfunc" "s1c" "s2c" "s3assert"