# Tests for locking conflicts with VACUUM and ANALYZE commands. setup { CREATE ROLE regress_vacuum_conflict; CREATE TABLE vacuum_tab (a int); } teardown { DROP TABLE vacuum_tab; DROP ROLE regress_vacuum_conflict; } session "s1" step "s1_begin" { BEGIN; } step "s1_lock" { LOCK vacuum_tab IN SHARE UPDATE EXCLUSIVE MODE; } step "s1_commit" { COMMIT; } session "s2" step "s2_grant" { ALTER TABLE vacuum_tab OWNER TO regress_vacuum_conflict; } step "s2_auth" { SET ROLE regress_vacuum_conflict; } step "s2_vacuum" { VACUUM vacuum_tab; } step "s2_analyze" { ANALYZE vacuum_tab; } step "s2_reset" { RESET ROLE; } # The role doesn't have privileges to vacuum the table, so VACUUM should # immediately skip the table without waiting for a lock. permutation "s1_begin" "s1_lock" "s2_auth" "s2_vacuum" "s1_commit" "s2_reset" permutation "s1_begin" "s2_auth" "s2_vacuum" "s1_lock" "s1_commit" "s2_reset" permutation "s1_begin" "s2_auth" "s1_lock" "s2_vacuum" "s1_commit" "s2_reset" permutation "s2_auth" "s2_vacuum" "s1_begin" "s1_lock" "s1_commit" "s2_reset" # Same as previously for ANALYZE permutation "s1_begin" "s1_lock" "s2_auth" "s2_analyze" "s1_commit" "s2_reset" permutation "s1_begin" "s2_auth" "s2_analyze" "s1_lock" "s1_commit" "s2_reset" permutation "s1_begin" "s2_auth" "s1_lock" "s2_analyze" "s1_commit" "s2_reset" permutation "s2_auth" "s2_analyze" "s1_begin" "s1_lock" "s1_commit" "s2_reset" # The role has privileges to vacuum the table, VACUUM will block if # another session holds a lock on the table and succeed in all cases. permutation "s1_begin" "s2_grant" "s1_lock" "s2_auth" "s2_vacuum" "s1_commit" "s2_reset" permutation "s1_begin" "s2_grant" "s2_auth" "s2_vacuum" "s1_lock" "s1_commit" "s2_reset" permutation "s1_begin" "s2_grant" "s2_auth" "s1_lock" "s2_vacuum" "s1_commit" "s2_reset" permutation "s2_grant" "s2_auth" "s2_vacuum" "s1_begin" "s1_lock" "s1_commit" "s2_reset" # Same as previously for ANALYZE permutation "s1_begin" "s2_grant" "s1_lock" "s2_auth" "s2_analyze" "s1_commit" "s2_reset" permutation "s1_begin" "s2_grant" "s2_auth" "s2_analyze" "s1_lock" "s1_commit" "s2_reset" permutation "s1_begin" "s2_grant" "s2_auth" "s1_lock" "s2_analyze" "s1_commit" "s2_reset" permutation "s2_grant" "s2_auth" "s2_analyze" "s1_begin" "s1_lock" "s1_commit" "s2_reset"