On Mon, Jan 7, 2019 at 6:54 PM Magnus Hagander <mag...@hagander.net> wrote:
>
> On Mon, Jan 7, 2019 at 9:01 AM Masahiko Sawada <sawada.m...@gmail.com> wrote:
>>
>> Hi,
>>
>> Logical replication enables us to replicate data changes to different
>> major version PostgreSQL as the doc says[1]. However the current
>> logical replication can work fine only if replicating to a newer major
>> version PostgreSQL such as from 10 to 11. Regarding using logical
>> replication with older major version, say sending from 11 to 10, it
>> will stop when a subscriber receives a truncate change because it's
>> not supported at PostgreSQL 10.  I think there are use cases where
>> using logical replication with a subscriber of an older version
>> PostgreSQL but I'm not sure we should support it.
>>
>> Of course in such case we can set the publication with publish =
>> 'insert, update, delete' to not send truncate changes but it requres
>> users to recognize the feature differences between major vesions and
>> in the future it will get more complex. So I think it would be better
>> to be configured autometically by PostgreSQL.
>>
>> To fix it we can make subscribers send its supporting message types to
>> the publisher at a startup time so that the publisher doesn't send
>> unsupported message types on the subscriber. Or as an another idea, we
>> can make subscribers ignore unsupported logical replication message
>> types instead of raising an error. Feedback is very welcome.
>>
>> [1] https://www.postgresql.org/docs/devel/logical-replication.html
>
>
> How would that work in practice?
>
> If an 11 server is sent a message saying "client does not support truncate", 
> and immediately generates an error, then you can no longer replicate even if 
> you turn off truncate. And if it delays it until the actual replication of 
> the item, then you just get the error on the primary ìnstead of the standby?
>
> I assume you are not suggesting a publication with truncation enabled should 
> just ignore replicating truncation if the downstream server doesn't support 
> it? Because if that's the suggestion, then a strong -1 from me on that.
>

I'm thinking that the we can make the pgoutput plugin recognize that
the downstream server doesn't support it and not send it. For example,
even if we create a publication with publish = 'truncate' we send
nothing due to checking supported message types by pgoutput plugin if
the downstream server is PostgreSQL server and its version is older
than 10.

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

Reply via email to