Re: [PATCH] Use indexes on the subscriber when REPLICA IDENTITY is full on the publisher
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
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:37:10Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > On 2023-01-07 13:50:04 -0500, Tom Lane wrote: >> 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. Yeah, but the point here is precisely that they might *not* match; for example there could be extra columns in the subscriber's table. This may be largely a documentation problem, though --- I think my beef is mainly that there's nothing in our docs explaining the semantic pitfalls of FULL, we only say "it's slow". Anyway, to get back to the point at hand: if we do have a REPLICA IDENTITY FULL situation then we can make use of any unique index over a subset of the transmitted columns, and if there's more than one candidate index it's unlikely to matter which one we pick. Given your comment I guess we have to also compare the non-indexed columns, so we can't completely convert the FULL case to the straight index case. But still it doesn't seem to me to be appropriate to use the planner to find a suitable index. regards, tom lane
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