From 325f2ec5557fd1c9156c910102522e04cb42d99c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Mar 2018 09:13:24 -0400 Subject: Handle heap rewrites even better in logical decoding Logical decoding should not publish anything about tables created as part of a heap rewrite during DDL. Those tables don't exist externally, so consumers of logical decoding cannot do anything sensible with that information. In ab28feae2bd3d4629bd73ae3548e671c57d785f0, we worked around this for built-in logical replication, but that was hack. This is a more proper fix: We mark such transient heaps using the new field pg_class.relwrite, linking to the original relation OID. By default, we ignore them in logical decoding before they get to the output plugin. Optionally, a plugin can register their interest in getting such changes, if they handle DDL specially, in which case the new field will help them get information about the actual table. Reviewed-by: Craig Ringer --- src/include/replication/output_plugin.h | 1 + src/include/replication/reorderbuffer.h | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'src/include/replication') diff --git a/src/include/replication/output_plugin.h b/src/include/replication/output_plugin.h index 78fd38bb169..82875d6b3d5 100644 --- a/src/include/replication/output_plugin.h +++ b/src/include/replication/output_plugin.h @@ -26,6 +26,7 @@ typedef enum OutputPluginOutputType typedef struct OutputPluginOptions { OutputPluginOutputType output_type; + bool receive_rewrites; } OutputPluginOptions; /* diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h index 0970abca52a..aa430c843c0 100644 --- a/src/include/replication/reorderbuffer.h +++ b/src/include/replication/reorderbuffer.h @@ -336,6 +336,11 @@ struct ReorderBuffer */ void *private_data; + /* + * Saved output plugin option + */ + bool output_rewrites; + /* * Private memory context. */ -- cgit v1.2.3