From f087d63a45b5935b5c15cecb7d88f140d5cc8b7c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 3 Mar 2020 10:12:49 +0900 Subject: Preserve pg_index.indisclustered across REINDEX CONCURRENTLY If the flag value is lost, a CLUSTER query following REINDEX CONCURRENTLY could fail. Non-concurrent REINDEX is already handling this case consistently. Author: Justin Pryzby Discussion: https://postgr.es/m/20200229024202.GH29456@telsasoft.com Backpatch-through: 12 --- src/backend/catalog/index.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/backend') diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index bb90fd38113..7408d495326 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1528,7 +1528,13 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName) newIndexForm->indimmediate = oldIndexForm->indimmediate; oldIndexForm->indimmediate = true; - /* Mark old index as valid and new as invalid as index_set_state_flags */ + /* Preserve indisclustered in the new index */ + newIndexForm->indisclustered = oldIndexForm->indisclustered; + + /* + * Mark the old index as valid, and the new index as invalid similarly + * to what index_set_state_flags() does. + */ newIndexForm->indisvalid = true; oldIndexForm->indisvalid = false; oldIndexForm->indisclustered = false; -- cgit v1.2.3