Re: row filtering for logical replication
Amit Kapila <amit.kapila16@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Release cache tuple when no longer needed
- ed0fbc8e5ac9 15.0 landed
-
Add some additional tests for row filters in logical replication.
- ceb57afd3ce1 15.0 landed
-
Fix one of the tests introduced in commit 52e4f0cd47.
- cfb4e209ec15 15.0 landed
-
Allow specifying row filters for logical replication of tables.
- 52e4f0cd472d 15.0 landed
-
Move scanint8() to numutils.c
- cfc7191dfea3 15.0 cited
-
Replace Test::More plans with done_testing
- 549ec201d613 15.0 cited
-
Reduce relcache access in WAL sender streaming logical changes
- 6ce16088bfed 15.0 cited
-
Small cleanups related to PUBLICATION framework code
- c9105dd3660f 15.0 cited
-
Add a view to show the stats of subscription workers.
- 8d74fc96db5f 15.0 cited
-
Allow publishing the tables of schema.
- 5a2832465fd8 15.0 cited
-
Doc: improve documentation of CREATE/ALTER SUBSCRIPTION.
- 1882d6cca161 15.0 cited
-
Add PublicationTable and PublicationRelInfo structs
- 0c6828fa987b 15.0 cited
-
Remove unused argument "txn" in maybe_send_schema().
- 93d573d86571 15.0 cited
-
Add prepare API support for streaming transactions in logical replication.
- 63cf61cdeb7b 15.0 cited
-
Unify PostgresNode's new() and get_new_node() methods
- 201a76183e20 15.0 cited
-
Use l*_node() family of functions where appropriate
- 2b00db4fb0c7 15.0 cited
-
Add support for prepared transactions to built-in logical replication.
- a8fd13cab0ba 15.0 cited
-
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
- ef9480509622 11.13 cited
-
Rename a parse node to be more general
- 91d1f2d30210 14.0 landed
-
Remove unused column atttypmod from initial tablesync query
- 4ad31bb2ef25 14.0 landed
-
SEARCH and CYCLE clauses
- 3696a600e229 14.0 cited
On Fri, Sep 24, 2021 at 11:06 AM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > On Fri, Sep 24, 2021 at 10:50 AM Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > 12) misuse of REPLICA IDENTITY > > > > > > The more I think about this, the more I think we're actually misusing > > > REPLICA IDENTITY for something entirely different. The whole purpose of > > > RI was to provide a row identifier for the subscriber. > > > > > > But now we're using it to ensure we have all the necessary columns, > > > which is entirely orthogonal to the original purpose. I predict this > > > will have rather negative consequences. > > > > > > People will either switch everything to REPLICA IDENTITY FULL, or create > > > bogus unique indexes with extra columns. Which is really silly, because > > > it wastes network bandwidth (transfers more data) or local resources > > > (CPU and disk space to maintain extra indexes). > > > > > > IMHO this needs more infrastructure to request extra columns to decode > > > (e.g. for the filter expression), and then remove them before sending > > > the data to the subscriber. > > > > > > > Yeah, but that would have an additional load on write operations and I > > am not sure at this stage but maybe there could be other ways to > > extend the current infrastructure wherein we build the snapshots using > > which we can access the user tables instead of only catalog tables. > > Such enhancements if feasible would be useful not only for allowing > > additional column access in row filters but for other purposes like > > allowing access to functions that access user tables. I feel we can > > extend this later as well seeing the usage and requests. For the first > > version, this doesn't sound too limiting to me. > > I agree with one point from Tomas, that if we bind the row filter with > the RI, then if the user has to use the row filter on any column 1) > they have to add an unnecessary column to the index 2) Since they have > to add it to RI so now we will have to send it over the network as > well. 3). We anyway have to WAL log it if it is modified because now > we forced users to add some columns to RI because they wanted to use > the row filter on that. Now suppose we remove that limitation and we > somehow make these changes orthogonal to RI, i.e. if we have a row > filter on some column then we WAL log it, so now the only extra cost > we are paying is to just WAL log that column, but the user is not > forced to add it to index, not forced to send it over the network. > I am not suggesting adding additional columns to RI just for using filter expressions. If most users that intend to publish delete/update wanted to use filter conditions apart from replica identity then we can later extend this functionality but not sure if the only way to accomplish that is to log additional data in WAL. I am just trying to see if we can provide meaningful functionality without extending too much the scope of this work. -- With Regards, Amit Kapila.