# Tests for locking conflicts with TRUNCATE commands. setup { CREATE ROLE regress_truncate_conflict; CREATE TABLE truncate_tab (a int); } teardown { DROP TABLE truncate_tab; DROP ROLE regress_truncate_conflict; } session s1 step s1_begin { BEGIN; } step s1_tab_lookup { SELECT count(*) >= 0 FROM truncate_tab; } step s1_commit { COMMIT; } session s2 step s2_grant { GRANT TRUNCATE ON truncate_tab TO regress_truncate_conflict; } step s2_auth { SET ROLE regress_truncate_conflict; } step s2_truncate { TRUNCATE truncate_tab; } step s2_reset { RESET ROLE; } # The role doesn't have privileges to truncate the table, so TRUNCATE should # immediately fail without waiting for a lock. permutation s1_begin s1_tab_lookup s2_auth s2_truncate s1_commit s2_reset permutation s1_begin s2_auth s2_truncate s1_tab_lookup s1_commit s2_reset permutation s1_begin s2_auth s1_tab_lookup s2_truncate s1_commit s2_reset permutation s2_auth s2_truncate s1_begin s1_tab_lookup s1_commit s2_reset # The role has privileges to truncate the table, TRUNCATE will block if # another session holds a lock on the table and succeed in all cases. permutation s1_begin s1_tab_lookup s2_grant s2_auth s2_truncate s1_commit s2_reset permutation s1_begin s2_grant s2_auth s2_truncate s1_tab_lookup s1_commit s2_reset permutation s1_begin s2_grant s2_auth s1_tab_lookup s2_truncate s1_commit s2_reset permutation s2_grant s2_auth s2_truncate s1_begin s1_tab_lookup s1_commit s2_reset