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 Tue, Jan 11, 2022 at 1:32 PM tanghy.fnst@fujitsu.com <tanghy.fnst@fujitsu.com> wrote: > > On Tuesday, January 11, 2022 10:16 AM houzj.fnst@fujitsu.com <houzj.fnst@fujitsu.com> wrote: > > > > Attach the v62 patch set which address the above comments and slightly > > adjust the commit message in 0002 patch. > > > > I saw a possible problem about Row-Filter tablesync SQL, which is related > to partition table. > > If a parent table is published with publish_via_partition_root off, its child > table should be taken as no row filter when combining the row filters with OR. > But when using the current SQL, this publication is ignored. > > For example: > create table parent (a int) partition by range (a); > create table child partition of parent default; > create publication puba for table parent with (publish_via_partition_root=false); > create publication pubb for table child where(a>10); > > Using current SQL in patch: > (table child oid is 16387) > SELECT DISTINCT pg_get_expr(prqual, prrelid) FROM pg_publication p > INNER JOIN pg_publication_rel pr ON (p.oid = pr.prpubid) > WHERE pr.prrelid = 16387 AND p.pubname IN ( 'puba', 'pubb' ) > AND NOT (select bool_or(puballtables) > FROM pg_publication > WHERE pubname in ( 'puba', 'pubb' )) > AND NOT EXISTS (SELECT 1 > FROM pg_publication_namespace pn, pg_class c, pg_publication p > WHERE c.oid = 16387 AND c.relnamespace = pn.pnnspid AND p.oid = pn.pnpubid AND p.pubname IN ( 'puba', 'pubb' )); > pg_get_expr > ------------- > (a > 10) > (1 row) > > > I think there should be no filter in this case, because "puba" publish table child > without row filter. Thoughts? > I also think so. > To fix this problem, we could use pg_get_publication_tables function in > tablesync SQL to filter which publications the table belongs to. How about the > following SQL, it would return NULL for "puba". > > SELECT DISTINCT pg_get_expr(pr.prqual, pr.prrelid) > FROM pg_publication p > LEFT OUTER JOIN pg_publication_rel pr > ON (p.oid = pr.prpubid AND pr.prrelid = 16387), > LATERAL pg_get_publication_tables(p.pubname) GPT > WHERE GPT.relid = 16387 AND p.pubname IN ( 'puba', 'pubb' ); > pg_get_expr > ------------- > (a > 10) > > (2 rows) > One advantage of this query is that it seems to have simplified the original query by removing NOT conditions. I haven't tested this yet but logically it appears correct to me. -- With Regards, Amit Kapila.