diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/catalog/index.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index e4203819a0e..2308d402565 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -2071,6 +2071,7 @@ index_constraint_create(Relation heapRelation, HeapTuple indexTuple; Form_pg_index indexForm; bool dirty = false; + bool marked_as_primary = false; pg_index = table_open(IndexRelationId, RowExclusiveLock); @@ -2084,6 +2085,7 @@ index_constraint_create(Relation heapRelation, { indexForm->indisprimary = true; dirty = true; + marked_as_primary = true; } if (deferrable && indexForm->indimmediate) @@ -2096,6 +2098,15 @@ index_constraint_create(Relation heapRelation, { CatalogTupleUpdate(pg_index, &indexTuple->t_self, indexTuple); + /* + * When we mark an existing index as primary, force a relcache + * flush on its parent table, so that all sessions will become + * aware that the table now has a primary key. This is important + * because it affects some replication behaviors. + */ + if (marked_as_primary) + CacheInvalidateRelcache(heapRelation); + InvokeObjectPostAlterHookArg(IndexRelationId, indexRelationId, 0, InvalidOid, is_internal); } |