(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_commit: COMMIT;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_commit: COMMIT;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_rollback: ROLLBACK;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-starting permutation: s1_track_funcs_all s2_track_funcs_all s2_func_call s2_ff s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s2_func_call s2_ff s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
(1 row)
-starting permutation: s1_track_funcs_all s2_track_funcs_all s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_all: SET track_functions = 'all';
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_all s1_func_call s2_begin s2_func_call s1_func_drop s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s1_func_call s2_begin s2_func_call_ifexists s1_func_drop s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_all: SET track_functions = 'all';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s2_commit: COMMIT;
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_none: SET track_functions = 'none';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
test_stat_func| | |
(1 row)
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s2_commit: COMMIT;
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_none: SET track_functions = 'none';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
test_stat_func| | |
(1 row)
-step s2_func_call: SELECT test_stat_func()
-ERROR: function call to dropped function
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
+(1 row)
+
step s2_commit: COMMIT;
step s2_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(4 rows)
step s2_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_track_counts_off: SET track_counts = off;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_track_counts_on: SET track_counts = on;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_track_counts_on: SET track_counts = on;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k3 | 1
(3 rows)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k3 | 1
(3 rows)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s1_commit_prepared_a: COMMIT PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s2_commit_prepared_a: COMMIT PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s1_rollback_prepared_a: ROLLBACK PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s2_rollback_prepared_a: ROLLBACK PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_drop: DROP TABLE test_stat_tab;
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s1_rollback_prepared_a: ROLLBACK PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
step s1_table_drop: DROP TABLE test_stat_tab;
step s1_prepare_a: PREPARE TRANSACTION 'a';
step s2_rollback_prepared_a: ROLLBACK PREPARED 'a';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(3 rows)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_commit: COMMIT;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_commit: COMMIT;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_rollback: ROLLBACK;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-starting permutation: s1_track_funcs_all s2_track_funcs_all s2_func_call s2_ff s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s2_func_call s2_ff s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
(1 row)
-starting permutation: s1_track_funcs_all s2_track_funcs_all s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_all: SET track_functions = 'all';
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_all s1_func_call s2_begin s2_func_call s1_func_drop s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_all s1_func_call s2_begin s2_func_call_ifexists s1_func_drop s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_all: SET track_functions = 'all';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s1_func_drop: DROP FUNCTION test_stat_func();
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s2_commit: COMMIT;
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_none: SET track_functions = 'none';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
test_stat_func| | |
(1 row)
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
step s2_commit: COMMIT;
(1 row)
-starting permutation: s1_disable_debug_discard s2_disable_debug_discard s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+starting permutation: s1_track_funcs_all s2_track_funcs_none s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_disable_debug_discard: SET debug_discard_caches = 0;
-step s2_disable_debug_discard: SET debug_discard_caches = 0;
step s1_track_funcs_all: SET track_functions = 'all';
step s2_track_funcs_none: SET track_functions = 'none';
step s1_func_call: SELECT test_stat_func();
(1 row)
step s2_begin: BEGIN;
-step s2_func_call: SELECT test_stat_func()
-test_stat_func
---------------
-
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
test_stat_func| | |
(1 row)
-step s2_func_call: SELECT test_stat_func()
-ERROR: function call to dropped function
+step s2_func_call_ifexists: SELECT test_stat_func_ifexists();
+test_stat_func_ifexists
+-----------------------
+
+(1 row)
+
step s2_commit: COMMIT;
step s2_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(4 rows)
step s2_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(1 row)
step s1_track_counts_off: SET track_counts = off;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_track_counts_on: SET track_counts = on;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_track_counts_on: SET track_counts = on;
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(2 rows)
step s1_table_update_k1: UPDATE test_stat_tab SET value = value + 1 WHERE key = 'k1';
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
k0 | 1
(1 row)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s1_commit_prepared_a: COMMIT PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s2_commit_prepared_a: COMMIT PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s1_rollback_prepared_a: ROLLBACK PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s2_rollback_prepared_a: ROLLBACK PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s1_rollback_prepared_a: ROLLBACK PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
ERROR: prepared transactions are disabled
step s2_rollback_prepared_a: ROLLBACK PREPARED 'a';
ERROR: prepared transaction with identifier "a" does not exist
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
(3 rows)
-step s1_ff: SELECT pg_stat_force_next_flush(); RESET debug_discard_caches;
+step s1_ff: SELECT pg_stat_force_next_flush();
pg_stat_force_next_flush
------------------------
CREATE TABLE test_slru_stats(slru TEXT, stat TEXT, value INT);
+ -- calls test_stat_func, but hides error if it doesn't exist
+ CREATE FUNCTION test_stat_func_ifexists() RETURNS VOID LANGUAGE plpgsql AS $$
+ BEGIN
+ PERFORM test_stat_func();
+ EXCEPTION WHEN undefined_function THEN
+ END;$$;
+
SELECT pg_stat_force_next_flush();
}
DROP TABLE IF EXISTS test_stat_tab;
DROP FUNCTION IF EXISTS test_stat_func();
DROP FUNCTION IF EXISTS test_stat_func2();
+ DROP FUNCTION test_stat_func_ifexists();
}
session s1
step s1_fetch_consistency_none { SET stats_fetch_consistency = 'none'; }
step s1_fetch_consistency_cache { SET stats_fetch_consistency = 'cache'; }
step s1_fetch_consistency_snapshot { SET stats_fetch_consistency = 'snapshot'; }
-step s1_disable_debug_discard { SET debug_discard_caches = 0; }
step s1_clear_snapshot { SELECT pg_stat_clear_snapshot(); }
step s1_begin { BEGIN; }
step s1_commit { COMMIT; }
step s1_rollback_prepared_a { ROLLBACK PREPARED 'a'; }
# Function stats steps
-step s1_ff { SELECT pg_stat_force_next_flush(); RESET debug_discard_caches; }
+step s1_ff { SELECT pg_stat_force_next_flush(); }
step s1_track_funcs_all { SET track_functions = 'all'; }
step s1_track_funcs_none { SET track_functions = 'none'; }
step s1_func_call { SELECT test_stat_func(); }
session s2
-setup { SET stats_fetch_consistency = 'none'; RESET debug_discard_caches; }
+setup { SET stats_fetch_consistency = 'none'; }
step s2_begin { BEGIN; }
-step s2_disable_debug_discard { SET debug_discard_caches = 0; }
step s2_commit { COMMIT; }
step s2_commit_prepared_a { COMMIT PREPARED 'a'; }
step s2_rollback_prepared_a { ROLLBACK PREPARED 'a'; }
step s2_track_funcs_all { SET track_functions = 'all'; }
step s2_track_funcs_none { SET track_functions = 'none'; }
step s2_func_call { SELECT test_stat_func() }
+step s2_func_call_ifexists { SELECT test_stat_func_ifexists(); }
step s2_func_call2 { SELECT test_stat_func2() }
step s2_func_stats {
SELECT
### Check interaction between dropping and stats reporting
-# Disable debug_discard_caches for a few of these tests - we precisely are
-# testing the behavior of no invalidations arriving. "Real" invalidations
-# shouldn't trigger behavioral difference, because we are testing paths
-# precisely because they do not have AcceptInvalidationMessages calls.()
+# Some of these tests try to test behavior in cases where no invalidation
+# processing is triggered. To prevent output changes when
+# debug_discard_caches, CATCACHE_FORCE_RELEASE or RELCACHE_FORCE_RELEASE are
+# used (which trigger invalidation processing in paths that normally don't),
+# test_stat_func_ifexists() can be used, which tries to call test_stat_func(),
+# but doesn't raise an error if the function doesn't exist.
# dropping a table remove stats iff committed
permutation
permutation
s1_track_funcs_all s2_track_funcs_all
s2_func_call s2_ff # this access increments refcount, preventing the shared entry from being dropped
- s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+ s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
permutation
s1_track_funcs_all s2_track_funcs_all
- s2_begin s2_func_call s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
+ s2_begin s2_func_call_ifexists s1_func_drop s1_func_stats s2_commit s2_ff s1_func_stats s2_func_stats
permutation
- s1_disable_debug_discard s2_disable_debug_discard
s1_track_funcs_all s2_track_funcs_all
- s1_func_call s2_begin s2_func_call s1_func_drop s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+ s1_func_call s2_begin s2_func_call_ifexists s1_func_drop s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
# Function calls don't necessarily trigger cache invalidation processing. The
# default handling of dropped stats could therefore end up with stats getting
# on. Verify that the stats are indeed dropped, and document the behavioral
# difference between track_functions settings.
permutation
- s1_disable_debug_discard s2_disable_debug_discard
s1_track_funcs_all s2_track_funcs_none
- s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+ s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_none s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
permutation
- s1_disable_debug_discard s2_disable_debug_discard
s1_track_funcs_all s2_track_funcs_none
- s1_func_call s2_begin s2_func_call s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call s2_commit s2_ff s1_func_stats s2_func_stats
+ s1_func_call s2_begin s2_func_call_ifexists s1_ff s1_func_stats s1_func_drop s2_track_funcs_all s1_func_stats s2_func_call_ifexists s2_commit s2_ff s1_func_stats s2_func_stats
# test pg_stat_reset_single_function_counters
permutation