mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Before performing checks on an index, we need to take some safety measures that apply to all index AMs. This includes: * verifying that the index can be checked - Only selected AMs are supported by amcheck (right now only B-Tree). The index has to be valid and not a temporary index from another session. * changing (and then restoring) user's security context * obtaining proper locks on the index (and table, if needed) * discarding GUC changes from the index functions Until now this was implemented in the B-Tree amcheck module, but it's something every AM will have to do. So relocate the code into a new module verify_common for reuse. The shared steps are implemented by amcheck_lock_relation_and_check(), receiving the AM-specific verification as a callback. Custom parameters may be supplied using a pointer. Author: Andrey Borodin <amborodin@acm.org> Reviewed-By: José Villanova <jose.arthur@gmail.com> Reviewed-By: Aleksander Alekseev <aleksander@timescale.com> Reviewed-By: Nikolay Samokhvalov <samokhvalov@gmail.com> Reviewed-By: Andres Freund <andres@anarazel.de> Reviewed-By: Tomas Vondra <tomas@vondra.me> Reviewed-By: Mark Dilger <mark.dilger@enterprisedb.com> Reviewed-By: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Kirill Reshke <reshkekirill@gmail.com> Discussion: https://postgr.es/m/45AC9B0A-2B45-40EE-B08F-BDCF5739D1E1%40yandex-team.ru
		
			
				
	
	
		
			32 lines
		
	
	
		
			950 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			950 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*-------------------------------------------------------------------------
 | |
|  *
 | |
|  * amcheck.h
 | |
|  *		Shared routines for amcheck verifications.
 | |
|  *
 | |
|  * Copyright (c) 2016-2025, PostgreSQL Global Development Group
 | |
|  *
 | |
|  * IDENTIFICATION
 | |
|  *	  contrib/amcheck/amcheck.h
 | |
|  *
 | |
|  *-------------------------------------------------------------------------
 | |
|  */
 | |
| #include "storage/bufpage.h"
 | |
| #include "storage/lmgr.h"
 | |
| #include "storage/lockdefs.h"
 | |
| #include "utils/relcache.h"
 | |
| #include "miscadmin.h"
 | |
| 
 | |
| /* Typedefs for callback functions for amcheck_lock_relation */
 | |
| typedef void (*IndexCheckableCallback) (Relation index);
 | |
| typedef void (*IndexDoCheckCallback) (Relation rel,
 | |
| 									  Relation heaprel,
 | |
| 									  void *state,
 | |
| 									  bool readonly);
 | |
| 
 | |
| extern void amcheck_lock_relation_and_check(Oid indrelid,
 | |
| 											Oid am_id,
 | |
| 											IndexDoCheckCallback check,
 | |
| 											LOCKMODE lockmode, void *state);
 | |
| 
 | |
| extern bool index_checkable(Relation rel, Oid am_id);
 |