alter_pub_for_schema.patch

application/octet-stream

Filename: alter_pub_for_schema.patch
Type: application/octet-stream
Part: 0
Message: Re: long-standing data loss bug in initial sync of logical replication

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
File+
src/backend/catalog/pg_publication.c 5 0
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;