Parsed test spec with 5 sessions starting permutation: s1-grant s1-begin-insert s2-begin-insert s3-as-admin s3-as-user-1 s3-as-readonly s3-as-monitor s1-commit s2-commit step s1-grant: GRANT ALL ON test_table TO test_user_1; GRANT ALL ON test_table TO test_user_2; step s1-begin-insert: BEGIN; SET ROLE test_user_1; INSERT INTO test_table VALUES (100, 100); step s2-begin-insert: BEGIN; SET ROLE test_user_2; INSERT INTO test_table VALUES (200, 200); step s3-as-admin: -- Admin should be able to see all transactions SELECT count(*) FROM get_all_active_transactions() WHERE transaction_number != 0; SELECT count(*) FROM get_global_active_transactions() WHERE transaction_number != 0; count --------------------------------------------------------------------- 2 (1 row) count --------------------------------------------------------------------- 4 (1 row) step s3-as-user-1: -- Even though we change the user via SET ROLE, the backends' (e.g., s1/2-begin-insert) -- userId (e.g., PG_PROC->userId) does not change, and hence none of the -- transactions show up because here we are using test_user_1. This is a -- limitation of isolation tester, we should be able to re-connect with -- test_user_1 on s1/2-begin-insert to show that test_user_1 sees only its own processes SET ROLE test_user_1; SELECT count(*) FROM get_all_active_transactions() WHERE transaction_number != 0; SELECT count(*) FROM get_global_active_transactions() WHERE transaction_number != 0; count --------------------------------------------------------------------- 0 (1 row) count --------------------------------------------------------------------- 1 (1 row) step s3-as-readonly: -- Even though we change the user via SET ROLE, the backends' (e.g., s1/2-begin-insert) -- userId (e.g., PG_PROC->userId) does not change, and hence none of the -- transactions show up because here we are using test_readonly. This is a -- limitation of isolation tester, we should be able to re-connect with -- test_readonly on s1/2-begin-insert to show that test_readonly sees only -- its own processes SET ROLE test_readonly; SELECT count(*) FROM get_all_active_transactions() WHERE transaction_number != 0; SELECT count(*) FROM get_global_active_transactions() WHERE transaction_number != 0; count --------------------------------------------------------------------- 0 (1 row) count --------------------------------------------------------------------- 0 (1 row) step s3-as-monitor: -- Monitor should see all transactions SET ROLE test_monitor; SELECT count(*) FROM get_all_active_transactions() WHERE transaction_number != 0; SELECT count(*) FROM get_global_active_transactions() WHERE transaction_number != 0; count --------------------------------------------------------------------- 2 (1 row) count --------------------------------------------------------------------- 4 (1 row) step s1-commit: COMMIT; step s2-commit: COMMIT; starting permutation: s4-record-pid s3-show-activity s5-kill s3-show-activity step s4-record-pid: SELECT pg_backend_pid() INTO selected_pid; step s3-show-activity: SET ROLE postgres; select count(*) from get_all_active_transactions() where process_id IN (SELECT * FROM selected_pid); count --------------------------------------------------------------------- 1 (1 row) step s5-kill: SELECT pg_terminate_backend(pg_backend_pid) FROM selected_pid; pg_terminate_backend --------------------------------------------------------------------- t (1 row) step s3-show-activity: SET ROLE postgres; select count(*) from get_all_active_transactions() where process_id IN (SELECT * FROM selected_pid); count --------------------------------------------------------------------- 0 (1 row)