On Wed, Dec 06, 2023 at 04:33:33PM -0800, Noah Misch wrote:
> On Wed, Dec 06, 2023 at 03:17:12PM +0900, Michael Paquier wrote:
>>> The "cannot" part of the message is also inaccurate, and it's not clear to 
>>> me
>>> why we have this specific restriction at all.  REINDEX INDEX CONCURRENTLY
>>> accepts such indexes, so I doubt it's an implementation gap.
>> 
>> If you would reword that, what would you change?
> 
> I'd do "skipping reindex of invalid index \"%s.%s\"".  If one wanted more,

In line with vacuum.c, that sounds like a good idea at the end.

> errhint("Use DROP INDEX or REINDEX INDEX.") would fit.

I'm OK with this suggestion as well.
--
Michael
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 4ee498d985..e56205abd8 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;
diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out
index acfd9d1f4f..446cfa678b 100644
--- a/src/test/regress/expected/create_index.out
+++ b/src/test/regress/expected/create_index.out
@@ -2581,7 +2581,8 @@ DROP INDEX concur_reindex_ind5_ccnew;
 DELETE FROM concur_reindex_tab4 WHERE c1 = 1;
 -- The invalid index is not processed when running REINDEX TABLE.
 REINDEX TABLE CONCURRENTLY concur_reindex_tab4;
-WARNING:  cannot reindex invalid index "public.concur_reindex_ind5" concurrently, skipping
+WARNING:  skipping reindex of invalid index "public.concur_reindex_ind5"
+HINT:  Use DROP INDEX or REINDEX INDEX.
 NOTICE:  table "concur_reindex_tab4" has no indexes that can be reindexed concurrently
 \d concur_reindex_tab4
         Table "public.concur_reindex_tab4"

Attachment: signature.asc
Description: PGP signature

Reply via email to