On Wed, Feb 28, 2018 at 08:03:02PM -0300, Euler Taveira wrote: > Hi, > > The attached patches add support for filtering rows in the publisher. > The output plugin will do the work if a filter was defined in CREATE > PUBLICATION command. An optional WHERE clause can be added after the > table name in the CREATE PUBLICATION such as: > > CREATE PUBLICATION foo FOR TABLE departments WHERE (id > 2000 AND id <= 3000); > > Row that doesn't match the WHERE clause will not be sent to the subscribers. > > Patches 0001 and 0002 are only refactors and can be applied > independently. 0003 doesn't include row filtering on initial > synchronization. > > Comments?
Great feature! I think a lot of people will like to have the option of trading a little extra CPU on the pub side for a bunch of network traffic and some work on the sub side. I noticed that the WHERE clause applies to all tables in the publication. Is that actually the right thing? I'm thinking of a case where we have foo(id, ...) and bar(foo_id, ....). To slice that correctly, we'd want to do the ids in the foo table and the foo_ids in the bar table. In the system as written, that would entail, at least potentially, writing a lot of publications by hand. Something like WHERE ( (table_1,..., table_N) HAS (/* WHERE clause here */) AND (table_N+1,..., table_M) HAS (/* WHERE clause here */) AND ... ) could be one way to specify. I also noticed that in psql, \dRp+ doesn't show the WHERE clause, which it probably should. Does it need regression tests? Best, David. -- David Fetter <david(at)fetter(dot)org> http://fetter.org/ Phone: +1 415 235 3778 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate