From d43bd090a8fee81fe88eb1e9e15e30d30ee130ed Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 7 Dec 2023 14:27:54 +0900 Subject: Improve some error messages with invalid indexes for REINDEX CONCURRENTLY An invalid index is skipped when doing REINDEX CONCURRENTLY at table level, with INDEX_CORRUPTED used as errcode. This is confusing, because an invalid index could exist after an interruption. The errcode is switched to OBJECT_NOT_IN_PREREQUISITE_STATE instead, as per a suggestion from Andres Freund. While on it, the error messages are reworded, and a hint is added, telling how to rebuild an invalid index in this case. This has been suggested by Noah Misch. Discussion: https://postgr.es/m/20231118230958.4fm3fhk4ypshxopa@awork3.anarazel.de --- src/backend/commands/indexcmds.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/backend/commands/indexcmds.c') diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 4ee498d9855..e56205abd8c 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -3526,10 +3526,11 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein if (!indexRelation->rd_index->indisvalid) ereport(WARNING, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot reindex invalid index \"%s.%s\" concurrently, skipping", + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("skipping reindex of invalid index \"%s.%s\"", get_namespace_name(get_rel_namespace(cellOid)), - get_rel_name(cellOid)))); + get_rel_name(cellOid)), + errhint("Use DROP INDEX or REINDEX INDEX."))); else if (indexRelation->rd_index->indisexclusion) ereport(WARNING, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -3578,10 +3579,11 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein if (!indexRelation->rd_index->indisvalid) ereport(WARNING, - (errcode(ERRCODE_INDEX_CORRUPTED), - errmsg("cannot reindex invalid index \"%s.%s\" concurrently, skipping", + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("skipping reindex of invalid index \"%s.%s\"", get_namespace_name(get_rel_namespace(cellOid)), - get_rel_name(cellOid)))); + get_rel_name(cellOid)), + errhint("Use DROP INDEX or REINDEX INDEX."))); else { ReindexIndexInfo *idx; -- cgit v1.2.3