Dear Önder,

Thank you for giving comments! The author's comment is quite helpful for us.

>
When I last dealt with the same issue, I was examining it from a slightly 
broader perspective. I think
my conclusion was that RelationFindReplTupleByIndex() is designed for the 
constraints of UNIQUE INDEX 
and Primary Key.
>

I see. IIUC that's why you have added tuples_equal() in the 
RelationFindReplTupleByIndex().

>
I think we should also be mindful about tuples_equal() function. When an index 
returns more than
one tuple, we rely on tuples_equal() function to make sure non-relevant tuples 
are skipped.

For btree indexes, it was safe to rely on that function as the columns that are 
indexed using btree
always have equality operator. I think we can safely assume the same for hash 
indexes.

However, say we indexed "point" type using "gist" index. Then, if we let this 
logic to kick in,
I think tuples_equal() would fail saying that there is no equality operator 
exists.
>

Good point. Actually I have tested for "point" datatype but it have not worked 
well.
Now I understand the reason.
It seemed that when TYPECACHE_EQ_OPR_FINFO is reuqesed to lookup_type_cache(),
it could return valid value only if the datatype has operator class for Btree 
or Hash.
So tuples_equal() might not be able to   use if tuples have point box circle 
types.


BTW, I have doubt that the restriction is not related with your commit.
In other words, if the table has attributes which the datatype is not for 
operator
class of Btree, we could not use REPLICA IDENTITY FULL. IIUC it is not 
documented.
Please see attched script to reproduce that. The final DELETE statement cannot 
be
replicated at the subscriber on my env.

>
For the specific notes you raised about strategy numbers / operator classes, I 
need to
study a bit :) Though, I'll be available to do that early next week.
>

Thanks! I'm looking forward to see your opinions...

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

Reply via email to