mirror of
https://github.com/postgres/postgres.git
synced 2026-01-26 09:41:40 +03:00
Use relation_close() more consistently in contrib/
All the code paths updated here have been using index_close() to close a relation that was opened with relation_open(), in pgstattuple and pageinspect. index_close() does the same thing as relation_close(), so there is no harm, but being inconsistent could lead to issues if the internals of these close() functions begin to introduce some specific logic in the future. In passing, this commit adds some comments explaining why we are using relation_open() instead of index_open() in a few places, which is due to the fact that partitioned indexes are not allowed in these functions. Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Reviewed-by: Japin Li <japinli@hotmail.com> Discussion: https://postgr.es/m/aUKamYGiDKO6byp5@ip-10-97-1-34.eu-west-3.compute.internal
This commit is contained in:
@@ -415,6 +415,10 @@ hash_bitmap_info(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("must be superuser to use raw page functions")));
|
||||
|
||||
/*
|
||||
* This uses relation_open() and not index_open(). The latter allows
|
||||
* partitioned indexes, and these are forbidden here.
|
||||
*/
|
||||
indexRel = relation_open(indexRelid, AccessShareLock);
|
||||
|
||||
if (!IS_INDEX(indexRel) || !IS_HASH(indexRel))
|
||||
@@ -486,7 +490,7 @@ hash_bitmap_info(PG_FUNCTION_ARGS)
|
||||
bit = ISSET(freep, bitmapbit) != 0;
|
||||
|
||||
_hash_relbuf(indexRel, mapbuf);
|
||||
index_close(indexRel, AccessShareLock);
|
||||
relation_close(indexRel, AccessShareLock);
|
||||
|
||||
/* Build a tuple descriptor for our result type */
|
||||
if (get_call_result_type(fcinfo, NULL, &tupleDesc) != TYPEFUNC_COMPOSITE)
|
||||
|
||||
@@ -514,6 +514,10 @@ pgstatginindex_internal(Oid relid, FunctionCallInfo fcinfo)
|
||||
bool nulls[3] = {false, false, false};
|
||||
Datum result;
|
||||
|
||||
/*
|
||||
* This uses relation_open() and not index_open(). The latter allows
|
||||
* partitioned indexes, and these are forbidden here.
|
||||
*/
|
||||
rel = relation_open(relid, AccessShareLock);
|
||||
|
||||
if (!IS_INDEX(rel) || !IS_GIN(rel))
|
||||
@@ -597,6 +601,10 @@ pgstathashindex(PG_FUNCTION_ARGS)
|
||||
float8 free_percent;
|
||||
uint64 total_space;
|
||||
|
||||
/*
|
||||
* This uses relation_open() and not index_open(). The latter allows
|
||||
* partitioned indexes, and these are forbidden here.
|
||||
*/
|
||||
rel = relation_open(relid, AccessShareLock);
|
||||
|
||||
if (!IS_INDEX(rel) || !IS_HASH(rel))
|
||||
@@ -691,7 +699,7 @@ pgstathashindex(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/* Done accessing the index */
|
||||
index_close(rel, AccessShareLock);
|
||||
relation_close(rel, AccessShareLock);
|
||||
|
||||
/* Count unused pages as free space. */
|
||||
stats.free_space += (uint64) stats.unused_pages * stats.space_per_page;
|
||||
|
||||
Reference in New Issue
Block a user