summaryrefslogtreecommitdiff
path: root/contrib/pgstattuple/pgstatindex.c
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-12-19 15:20:53 +0900
committerMichael Paquier <michael@paquier.xyz>2023-12-19 15:20:53 +0900
commitb4c1d255c17c2f004dcfbeeae11529271c18624c (patch)
tree4db2fce60cbb9e7d151bc1c48aa7ccee3661706e /contrib/pgstattuple/pgstatindex.c
parentb4c147ac6fd5238d2c49b6369d555f29dbfc9144 (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/18246-f4d9ff7cb3af77e6@postgresql.org Backpatch-through: 12
Diffstat (limited to 'contrib/pgstattuple/pgstatindex.c')
-rw-r--r--contrib/pgstattuple/pgstatindex.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/contrib/pgstattuple/pgstatindex.c b/contrib/pgstattuple/pgstatindex.c
index f8faefc60ae..74b2651d973 100644
--- a/contrib/pgstattuple/pgstatindex.c
+++ b/contrib/pgstattuple/pgstatindex.c
@@ -615,10 +615,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",