0003-alternative-experimental-fix-lock.patch
text/x-patch
Filename: 0003-alternative-experimental-fix-lock.patch
Type: text/x-patch
Part: 2
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: format-patch
Series: patch 0003
Subject: alternative experimental fix - lock
| File | + | − |
|---|---|---|
| src/backend/commands/publicationcmds.c | 1 | 1 |
| src/backend/replication/pgoutput/pgoutput.c | 1 | 53 |
From a95b5fe1d8243e16fdf5e2db5a773495f4641829 Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Fri, 17 Nov 2023 11:20:50 +0100
Subject: [PATCH 3/3] alternative experimental fix - lock
---
src/backend/commands/publicationcmds.c | 2 +-
src/backend/replication/pgoutput/pgoutput.c | 54 +--------------------
2 files changed, 2 insertions(+), 54 deletions(-)
diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c
index f4ba572697a..7a4c315183a 100644
--- a/src/backend/commands/publicationcmds.c
+++ b/src/backend/commands/publicationcmds.c
@@ -1575,7 +1575,7 @@ OpenTableList(List *tables)
/* Allow query cancel in case this takes a long time */
CHECK_FOR_INTERRUPTS();
- rel = table_openrv(t->relation, ShareUpdateExclusiveLock);
+ rel = table_openrv(t->relation, ShareRowExclusiveLock);
myrelid = RelationGetRelid(rel);
/*
diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c
index adcd5688045..09f53bea0a0 100644
--- a/src/backend/replication/pgoutput/pgoutput.c
+++ b/src/backend/replication/pgoutput/pgoutput.c
@@ -12,8 +12,6 @@
*/
#include "postgres.h"
-#include "access/genam.h"
-#include "access/table.h"
#include "access/tupconvert.h"
#include "catalog/partition.h"
#include "catalog/pg_publication.h"
@@ -31,7 +29,6 @@
#include "replication/origin.h"
#include "replication/pgoutput.h"
#include "utils/builtins.h"
-#include "utils/fmgroids.h"
#include "utils/inval.h"
#include "utils/lsyscache.h"
#include "utils/memutils.h"
@@ -1961,51 +1958,6 @@ set_schema_sent_in_streamed_txn(RelationSyncEntry *entry, TransactionId xid)
MemoryContextSwitchTo(oldctx);
}
-static List*
-GetRelationPublicationsRaw(Oid relid)
-{
- List *result = NIL;
- SysScanDesc scandesc;
- Relation relation;
- ScanKeyData key[1];
- HeapTuple tup;
-
- elog(LOG, "GetRelationPublicationsRaw relid %d / start", relid);
-
- relation = table_open(PublicationRelRelationId, AccessShareLock);
-
- ScanKeyInit(&key[0],
- Anum_pg_publication_rel_prrelid,
- BTEqualStrategyNumber, F_OIDEQ,
- ObjectIdGetDatum(relid));
-
- scandesc = systable_beginscan(relation,
- PublicationRelPrrelidPrpubidIndexId,
- true,
- NULL,
- 1,
- key);
-
- while (HeapTupleIsValid(tup = systable_getnext(scandesc)))
- {
- Form_pg_publication_rel form;
-
- form = (Form_pg_publication_rel) GETSTRUCT(tup);
-
- elog(LOG, "GetRelationPublicationsRaw relid %d / tuple pub %d", relid, form->prpubid);
-
- result = lappend_oid(result, form->prpubid);
- }
-
- systable_endscan(scandesc);
-
- table_close(relation, AccessShareLock);
-
- elog(LOG, "GetRelationPublicationsRaw relid %d / end", relid);
-
- return result;
-}
-
/*
* Find or create entry in the relation schema cache.
*
@@ -2051,15 +2003,11 @@ get_rel_sync_entry(PGOutputData *data, Relation relation)
elog(LOG, "get_rel_sync_entry relation %d replicate_valid %d", RelationGetRelid(relation), entry->replicate_valid);
- /* force refresh of the entry for each change */
- entry->replicate_valid = false;
-
/* Validate the entry */
if (!entry->replicate_valid)
{
Oid schemaId = get_rel_namespace(relid);
- List *pubids = GetRelationPublicationsRaw(relid);
- // List *pubids = GetRelationPublications(relid);
+ List *pubids = GetRelationPublications(relid);
/*
* We don't acquire a lock on the namespace system table as we build
--
2.41.0