diff options
author | Michael Paquier <michael@paquier.xyz> | 2020-03-03 10:12:28 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2020-03-03 10:12:28 +0900 |
commit | d79fb88ac738e0854e84a6c9445babfa5b2504b0 (patch) | |
tree | 54a5bee61d207261dff8b93b5a4870d819e6aead /src/backend | |
parent | 91f3bd732cea7e25e53eaceae88232d0ab984434 (diff) | |
download | postgresql-d79fb88ac738e0854e84a6c9445babfa5b2504b0.tar.gz postgresql-d79fb88ac738e0854e84a6c9445babfa5b2504b0.zip |
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
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/catalog/index.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 8880586c372..1681f61727e 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1527,7 +1527,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; |