mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 12:22:45 +03:00
Fix dependency handling at swap phase of REINDEX CONCURRENTLY
When swapping the dependencies of the old and new indexes, the code has been correctly switching all links in pg_depend from the old to the new index for both referencing and referenced entries. However it forgot the fact that the new index may itself have existing entries in pg_depend, like references to the parent table attributes. This resulted in duplicated entries in pg_depend after running REINDEX CONCURRENTLY. Fix this problem by removing any existing entries in pg_depend on the new index before switching the dependencies of the old index to the new one. More regression tests are added to check the consistency of entries in pg_depend for indexes, including partition indexes. Author: Michael Paquier Discussion: https://postgr.es/m/20191025064318.GF8671@paquier.xyz Backpatch-through: 12
This commit is contained in:
@@ -1668,8 +1668,12 @@ index_concurrently_swap(Oid newIndexId, Oid oldIndexId, const char *oldName)
|
||||
}
|
||||
|
||||
/*
|
||||
* Move all dependencies of and on the old index to the new one
|
||||
* Move all dependencies of and on the old index to the new one. First
|
||||
* remove any dependencies that the new index may have to provide an
|
||||
* initial clean state for the dependency switch, and then move all the
|
||||
* dependencies from the old index to the new one.
|
||||
*/
|
||||
deleteDependencyRecordsFor(RelationRelationId, newIndexId, false);
|
||||
changeDependenciesOf(RelationRelationId, oldIndexId, newIndexId);
|
||||
changeDependenciesOn(RelationRelationId, oldIndexId, newIndexId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user