Re: [PATCH] Use indexes on the subscriber when REPLICA IDENTITY is full on the publisher
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Önder Kalacı <onderkalaci@gmail.com>, "shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>, "wangw.fnst@fujitsu.com" <wangw.fnst@fujitsu.com>, Amit Kapila <amit.kapila16@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-01-09T20:03:47Z
Lists: pgsql-hackers
Hi, On 2023-01-07 13:50:04 -0500, Tom Lane wrote: > I think we should either live within the constraints set by this > overarching design, or else nuke execReplication.c from orbit and > start using the real planner and executor. Perhaps the foreign > key enforcement mechanisms could be a model --- although if you > don't want to buy into using SPI as well, you probably should look > at Amit L's work at [1]. I don't think using the full executor for every change is feasible from an overhead perspective. But it might make sense to bail out to using the full executor in a bunch of non-fastpath paths. I think this is basically similar to COPY not using the full executor. But that doesn't mean that all of this has to be open coded in execReplication.c. Abstracting pieces so that COPY, logical rep and perhaps even nodeModifyTable.c can share code makes sense. > Also ... maybe I am missing something, but is REPLICA IDENTITY FULL > sanely defined in the first place? It looks to me that > RelationFindReplTupleSeq assumes without proof that there is a unique > full-tuple match, but that is only reasonable to assume if there is at > least one unique index (and maybe not even then, if nulls are involved). If the table definition match between publisher and standby, it doesn't matter which tuple is updated, if all columns are used to match. Since there's nothing distinguishing two rows with all columns being equal, it doesn't matter which we update. Greetings, Andres Freund
Commits
-
Add the testcases for 89e46da5e5.
- 805b821e77a3 16.0 landed
-
Allow the use of indexes other than PK and REPLICA IDENTITY on the subscriber.
- 89e46da5e511 16.0 landed
-
Rework query relation permission checking
- a61b1f74823c 16.0 cited
-
Generalize ri_RootToPartitionMap to use for non-partition children
- fb958b5da86d 16.0 cited
-
Add wait_for_subscription_sync for TAP tests.
- 0c20dd33db16 16.0 cited
-
Logical replication
- 665d1fad99e7 10.0 cited