From 025ecfd3b105508c50936be170b2ccbc3a25c994 Mon Sep 17 00:00:00 2001 From: Hayato Kuroda Date: Mon, 3 Mar 2025 19:40:10 +0900 Subject: [PATCH v2 1/3] Avoid Invalidating all entries when ALTER PUBLICATION is executed When the ALTER PUBLICATION command is executed, all entries in RelationSyncCache will be discarded anyway. This mechanism works well but is sometimes not efficient. For example, when the ALTER PUBLICATION DROP TABLE is executed, 1) the specific entry in RelationSyncCache will be removed, and then 2) all entries will be discarded. This patch avoids dropping all entries in RelationSyncCache when ALTER PUBLICATION is executed. Theoretically, it is enough to invalidate the related relacache since RelacheCallback has already been registered. Author: Shlok Kyal and Hayato Kuroda --- src/backend/replication/pgoutput/pgoutput.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 7d464f656a..64aea3af83 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1970,18 +1970,6 @@ init_rel_sync_cache(MemoryContext cachectx) rel_sync_cache_publication_cb, (Datum) 0); - /* - * Flush all cache entries after any publication changes. (We need no - * callback entry for pg_publication, because publication_invalidation_cb - * will take care of it.) - */ - CacheRegisterSyscacheCallback(PUBLICATIONRELMAP, - rel_sync_cache_publication_cb, - (Datum) 0); - CacheRegisterSyscacheCallback(PUBLICATIONNAMESPACEMAP, - rel_sync_cache_publication_cb, - (Datum) 0); - relation_callbacks_registered = true; } -- 2.43.5