0001-RelationClose-after-RelationIdGetRelation.patch
application/octet-stream
Filename: 0001-RelationClose-after-RelationIdGetRelation.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: RelationClose after RelationIdGetRelation
| File | + | − |
|---|---|---|
| src/backend/replication/pgoutput/pgoutput.c | 10 | 3 |
From de3a45ad05bc2081b3942c10f701a3a1476e522e Mon Sep 17 00:00:00 2001
From: "Mark Zhao" <875941708@qq.com>
Date: Wed, 30 Dec 2020 13:36:12 +0000
Subject: [PATCH] RelationClose after RelationIdGetRelation
---
src/backend/replication/pgoutput/pgoutput.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c
index 15379e3..a36dbaf 100644
--- a/src/backend/replication/pgoutput/pgoutput.c
+++ b/src/backend/replication/pgoutput/pgoutput.c
@@ -363,6 +363,7 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
PGOutputData *data = (PGOutputData *) ctx->output_plugin_private;
MemoryContext old;
RelationSyncEntry *relentry;
+ Relation ancestor = NULL;
if (!is_publishable_relation(relation))
return;
@@ -404,7 +405,8 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
if (relentry->publish_as_relid != RelationGetRelid(relation))
{
Assert(relation->rd_rel->relispartition);
- relation = RelationIdGetRelation(relentry->publish_as_relid);
+ ancestor = RelationIdGetRelation(relentry->publish_as_relid);
+ relation = ancestor;
/* Convert tuple if needed. */
if (relentry->map)
tuple = execute_attr_map_tuple(tuple, relentry->map);
@@ -425,7 +427,8 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
if (relentry->publish_as_relid != RelationGetRelid(relation))
{
Assert(relation->rd_rel->relispartition);
- relation = RelationIdGetRelation(relentry->publish_as_relid);
+ ancestor = RelationIdGetRelation(relentry->publish_as_relid);
+ relation = ancestor;
/* Convert tuples if needed. */
if (relentry->map)
{
@@ -448,7 +451,8 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
if (relentry->publish_as_relid != RelationGetRelid(relation))
{
Assert(relation->rd_rel->relispart`ition);
- relation = RelationIdGetRelation(relentry->publish_as_relid);
+ ancestor = RelationIdGetRelation(relentry->publish_as_relid);
+ relation = ancestor;
/* Convert tuple if needed. */
if (relentry->map)
oldtuple = execute_attr_map_tuple(oldtuple, relentry->map);
@@ -465,6 +469,9 @@ pgoutput_change(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
Assert(false);
}
+ if (ancestor)
+ RelationClose(ancestor);
+
/* Cleanup */
MemoryContextSwitchTo(old);
MemoryContextReset(data->context);
--
1.8.3.1