v19-v20-delta.patch
application/octet-stream
Filename: v19-v20-delta.patch
Type: application/octet-stream
Part: 1
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
Series: patch v19
| File | + | − |
|---|---|---|
| src/backend/replication/pgoutput/pgoutput.c | 10 | 13 |
diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c
index ee54a17..844b285 100644
--- a/src/backend/replication/pgoutput/pgoutput.c
+++ b/src/backend/replication/pgoutput/pgoutput.c
@@ -499,14 +499,6 @@ pgoutput_truncate(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
continue;
/*
- * Don't send partitioned tables unless publication wants to send
- * only the root tables, because partitions will be sent instead.
- */
- if (relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE &&
- relentry->publish_as_relid != relid)
- continue;
-
- /*
* Don't send partitions if the publication wants to send only the
* root tables through it.
*/
@@ -644,6 +636,7 @@ get_rel_sync_entry(PGOutputData *data, Oid relid)
{
RelationSyncEntry *entry;
bool am_partition = get_rel_relispartition(relid);
+ char relkind = get_rel_relkind(relid);
bool found;
MemoryContext oldctx;
@@ -692,10 +685,8 @@ get_rel_sync_entry(PGOutputData *data, Oid relid)
if (pub->alltables)
{
publish = true;
- if (pub->pubviaroot)
- publish_as_relid = am_partition ?
- llast_oid(get_partition_ancestors(relid)) :
- relid;
+ if (pub->pubviaroot && am_partition)
+ publish_as_relid = llast_oid(get_partition_ancestors(relid));
}
if (!publish)
@@ -732,7 +723,13 @@ get_rel_sync_entry(PGOutputData *data, Oid relid)
publish = true;
}
- if (publish)
+ /*
+ * Don't publish changes for partitioned tables, because
+ * publishing those of its partitions suffices, unless partition
+ * changes won't be published due to pubviaroot being set.
+ */
+ if (publish &&
+ (relkind != RELKIND_PARTITIONED_TABLE || pub->pubviaroot))
{
entry->pubactions.pubinsert |= pub->pubactions.pubinsert;
entry->pubactions.pubupdate |= pub->pubactions.pubupdate;