Hi,

I see no one responded to this important part of my review so far:

On 9/23/21 2:33 PM, Tomas Vondra wrote:
3) create_subscription.sgml

     <literal>WHERE</literal> clauses, rows must satisfy all expressions
     to be copied. If the subscriber is a

I'm rather skeptical about the principle that all expressions have to match - I'd have expected exactly the opposite behavior, actually.

I see a subscription as "a union of all publications". Imagine for example you have a data set for all customers, and you create a publication for different parts of the world, like

   CREATE PUBLICATION customers_france
      FOR TABLE customers WHERE (country = 'France');

   CREATE PUBLICATION customers_germany
      FOR TABLE customers WHERE (country = 'Germany');

   CREATE PUBLICATION customers_usa
      FOR TABLE customers WHERE (country = 'USA');

and now you want to subscribe to multiple publications, because you want to replicate data for multiple countries (e.g. you want EU countries). But if you do

   CREATE SUBSCRIPTION customers_eu
          PUBLICATION customers_france, customers_germany;

then you won't get anything, because each customer belongs to just a single country. Yes, I could create multiple individual subscriptions, one for each country, but that's inefficient and may have a different set of issues (e.g. keeping them in sync when a customer moves between countries).

I might have missed something, but I haven't found any explanation why the requirement to satisfy all expressions is the right choice.

IMHO this should be 'satisfies at least one expression' i.e. we should connect the expressions by OR, not AND.

Am I the only one finding the current behavior strange? What's the reasoning supporting the current approach?


regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Reply via email to