diff options
author | Michael Paquier | 2023-12-19 06:20:39 +0000 |
---|---|---|
committer | Michael Paquier | 2023-12-19 06:20:39 +0000 |
commit | a8dd62ef4959141e410278fd68b3d1821e0bbbaa (patch) | |
tree | 9afddec15bc5e24cae6f6b270df09eeae37646ff /contrib/pgstattuple/pgstatindex.c | |
parent | c8bc807cf8bc741c83bc74553326856affee5a4f (diff) |
pgstattuple: Fix failure with pgstathashindex() for partitioned indexes
As coded, the function relied on index_open() when opening an index
relation, allowing partitioned indexes to be processed by
pgstathashindex(). This was leading to a "could not open file" error
because partitioned indexes have no physical files, or to a crash with
an assertion failure (like on HEAD).
This issue is fixed by applying the same checks as the other stat
functions for indexes, with a lookup at both RELKIND_INDEX and the index
AM expected.
Author: Alexander Lakhin
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 12
Diffstat (limited to 'contrib/pgstattuple/pgstatindex.c')
-rw-r--r-- | contrib/pgstattuple/pgstatindex.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/contrib/pgstattuple/pgstatindex.c b/contrib/pgstattuple/pgstatindex.c index 8e5a4d6a663..5c06ba6db43 100644 --- a/contrib/pgstattuple/pgstatindex.c +++ b/contrib/pgstattuple/pgstatindex.c @@ -600,10 +600,9 @@ pgstathashindex(PG_FUNCTION_ARGS) float8 free_percent; uint64 total_space; - rel = index_open(relid, AccessShareLock); + rel = relation_open(relid, AccessShareLock); - /* index_open() checks that it's an index */ - if (!IS_HASH(rel)) + if (!IS_INDEX(rel) || !IS_HASH(rel)) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("relation \"%s\" is not a hash index", |