mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
	
	
	
| -- minimal test, basically just verifying that amcheck
 | |
| CREATE TABLE bttest_a(id int8);
 | |
| CREATE TABLE bttest_b(id int8);
 | |
| 
 | |
| INSERT INTO bttest_a SELECT * FROM generate_series(1, 100000);
 | |
| INSERT INTO bttest_b SELECT * FROM generate_series(100000, 1, -1);
 | |
| 
 | |
| CREATE INDEX bttest_a_idx ON bttest_a USING btree (id);
 | |
| CREATE INDEX bttest_b_idx ON bttest_b USING btree (id);
 | |
| 
 | |
| CREATE ROLE regress_bttest_role;
 | |
| 
 | |
| -- verify permissions are checked (error due to function not callable)
 | |
| SET ROLE regress_bttest_role;
 | |
| SELECT bt_index_check('bttest_a_idx'::regclass);
 | |
| SELECT bt_index_parent_check('bttest_a_idx'::regclass);
 | |
| RESET ROLE;
 | |
| 
 | |
| -- we, intentionally, don't check relation permissions - it's useful
 | |
| -- to run this cluster-wide with a restricted account, and as tested
 | |
| -- above explicit permission has to be granted for that.
 | |
| GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO regress_bttest_role;
 | |
| GRANT EXECUTE ON FUNCTION bt_index_parent_check(regclass) TO regress_bttest_role;
 | |
| SET ROLE regress_bttest_role;
 | |
| SELECT bt_index_check('bttest_a_idx');
 | |
| SELECT bt_index_parent_check('bttest_a_idx');
 | |
| RESET ROLE;
 | |
| 
 | |
| -- verify plain tables are rejected (error)
 | |
| SELECT bt_index_check('bttest_a');
 | |
| SELECT bt_index_parent_check('bttest_a');
 | |
| 
 | |
| -- verify non-existing indexes are rejected (error)
 | |
| SELECT bt_index_check(17);
 | |
| SELECT bt_index_parent_check(17);
 | |
| 
 | |
| -- verify wrong index types are rejected (error)
 | |
| BEGIN;
 | |
| CREATE INDEX bttest_a_brin_idx ON bttest_a USING brin(id);
 | |
| SELECT bt_index_parent_check('bttest_a_brin_idx');
 | |
| ROLLBACK;
 | |
| 
 | |
| -- normal check outside of xact
 | |
| SELECT bt_index_check('bttest_a_idx');
 | |
| -- more expansive test
 | |
| SELECT bt_index_parent_check('bttest_b_idx');
 | |
| 
 | |
| BEGIN;
 | |
| SELECT bt_index_check('bttest_a_idx');
 | |
| SELECT bt_index_parent_check('bttest_b_idx');
 | |
| -- make sure we don't have any leftover locks
 | |
| SELECT * FROM pg_locks
 | |
| WHERE relation = ANY(ARRAY['bttest_a', 'bttest_a_idx', 'bttest_b', 'bttest_b_idx']::regclass[])
 | |
|     AND pid = pg_backend_pid();
 | |
| COMMIT;
 | |
| 
 | |
| -- cleanup
 | |
| DROP TABLE bttest_a;
 | |
| DROP TABLE bttest_b;
 | |
| DROP OWNED BY regress_bttest_role; -- permissions
 | |
| DROP ROLE regress_bttest_role;
 |