diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c
index 0602398a54..067336d02c 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -32,6 +32,7 @@
 #include "catalog/pg_type.h"
 #include "commands/publicationcmds.h"
 #include "funcapi.h"
+#include "storage/lmgr.h"
 #include "utils/array.h"
 #include "utils/builtins.h"
 #include "utils/catcache.h"
@@ -614,6 +615,7 @@ publication_add_schema(Oid pubid, Oid schemaid, bool if_not_exists)
 	List	   *schemaRels = NIL;
 	ObjectAddress myself,
 				referenced;
+	ListCell* lc;
 
 	rel = table_open(PublicationNamespaceRelationId, RowExclusiveLock);
 
@@ -677,6 +679,9 @@ publication_add_schema(Oid pubid, Oid schemaid, bool if_not_exists)
 	 */
 	schemaRels = GetSchemaPublicationRelations(schemaid,
 											   PUBLICATION_PART_ALL);
+	foreach(lc, schemaRels) {
+		LockRelationOid(lfirst_oid(lc), ShareRowExclusiveLock);
+	}
 	InvalidatePublicationRels(schemaRels);
 
 	return myself;
