mirror of
https://github.com/postgres/postgres.git
synced 2025-06-22 02:52:08 +03:00
Prevent reindex of invalid indexes on TOAST tables
Such indexes can only be duplicated leftovers of a previously failed REINDEX CONCURRENTLY command, and a valid equivalent is guaranteed to exist. As toast indexes can only be dropped if invalid, reindexing these would lead to useless duplicated indexes that can't be dropped anymore, except if the parent relation is dropped. Thanks to Justin Pryzby for reminding that this problem was reported long ago during the review of the original patch of REINDEX CONCURRENTLY, but the issue was never addressed. Reported-by: Sergei Kornilov, Justin Pryzby Author: Julien Rouhaud Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/36712441546604286%40sas1-890ba5c2334a.qloud-c.yandex.net Discussion: https://postgr.es/m/20200216190835.GA21832@telsasoft.com Backpatch-through: 12
This commit is contained in:
@ -2868,6 +2868,16 @@ ReindexRelationConcurrently(Oid relationOid, int options)
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot reindex system catalogs concurrently")));
|
||||
|
||||
/*
|
||||
* Don't allow reindex for an invalid index on TOAST table, as
|
||||
* if rebuild it would not be possible to drop it.
|
||||
*/
|
||||
if (IsToastNamespace(get_rel_namespace(relationOid)) &&
|
||||
!get_index_isvalid(relationOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot reindex invalid index on TOAST table concurrently")));
|
||||
|
||||
/* Save the list of relation OIDs in private context */
|
||||
oldcontext = MemoryContextSwitchTo(private_context);
|
||||
|
||||
|
Reference in New Issue
Block a user