Re: [PATCH] Use indexes on the subscriber when REPLICA IDENTITY is full on the publisher
Önder Kalacı <onderkalaci@gmail.com>
From: Önder Kalacı <onderkalaci@gmail.com>
To: "shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>,
Peter Smith <smithpb2250@gmail.com>, vignesh C <vignesh21@gmail.com>,
"wangw.fnst@fujitsu.com" <wangw.fnst@fujitsu.com>, Marco Slot <marco.slot@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-03-14T07:18:03Z
Lists: pgsql-hackers
Hi Shi Yu, > in RemoteRelContainsLeftMostColumnOnIdx(): > > + if (indexInfo->ii_NumIndexAttrs < 1) > + return false; > > Did you see any cases that the condition is true? I think there is at > least one > column in the index. If so, we can use an Assert(). > Actually, it was mostly to guard against any edge cases. I thought similar to tables, we can have zero column indexes, but it turns out it is not possible. Also, index_create seems to check that, so changing it asset makes sense: > > /* > * check parameters > */ > if (indexInfo->ii_NumIndexAttrs < 1) > elog(ERROR, "must index at least one column"); > > + if (attrmap->maplen <= AttrNumberGetAttrOffset(keycol)) > + return false; > > Similarly, I think `attrmap->maplen` is the number of columns and it is > always > greater than keycol. If you agree, we can check it with an Assert(). At this point, I'm really hesitant to make any assumptions. Logical replication is pretty flexible, and who knows maybe dropped columns will be treated differently at some point, and this assumption changes? I really feel more comfortable to keep this as-is. We call this function very infrequently anyway. > Besides, It > seems we don't need AttrNumberGetAttrOffset(). > > Why not? We are accessing the AttrNumberGetAttrOffset(keycol) element of the array attnums? > 2. > +# make sure that the subscriber has the correct data after the update > UPDATE > > "update UPDATE" seems to be a typo. > > thanks, fixed > 3. > +# now, drop the index with the expression, and re-create index on column > lastname > > The comment says "re-create index on column lastname" but it seems we > didn't do > that, should it be modified to something like: > # now, drop the index with the expression, we will use sequential scan > > > Thanks, fixed I'll add the changes to v49 in the next e-mail. Thanks, Onder KALACI
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