Re: Making all nbtree entries unique by having heap TIDs participatein comparisons - Mailing list pgsql-hackers
From | Peter Geoghegan |
---|---|
Subject | Re: Making all nbtree entries unique by having heap TIDs participatein comparisons |
Date | |
Msg-id | CAH2-Wz=EhkwjWAB9VqEHOR_w2DonbyOohryhvcSyhXgMDr=bUg@mail.gmail.com Whole thread Raw |
In response to | Re: Making all nbtree entries unique by having heap TIDs participatein comparisons (Andrey Lepikhov <a.lepikhov@postgrespro.ru>) |
Responses |
Re: Making all nbtree entries unique by having heap TIDs participatein comparisons
|
List | pgsql-hackers |
On Sun, Nov 4, 2018 at 8:21 AM Andrey Lepikhov <a.lepikhov@postgrespro.ru> wrote: > I mean that your code have not any problems that I can detect by > regression tests and by the retail index tuple deletion patch. > Difference in amount of dropped objects is not a problem. It is caused > by pos 2293 - 'else if (thisobj->objectSubId == 0)' - at the file > catalog/dependency.c and it is legal behavior: column row object deleted > without any report because we already decided to drop its whole table. The behavior implied by using ASC heap TID order is always "legal", but it may cause a regression in certain functionality -- something that an ordinary user might complain about. There were some changes when DESC heap TID order is used too, of course, but those were safe to ignore (it seemed like nobody could ever care). It might have been okay to just use DESC order, but since it now seems like I must use ASC heap TID order for performance reasons, I have to tackle a couple of these issues head-on (e.g. 'cannot drop trigger trg1'). > Also, I checked the triggers test. Difference in the ERROR message > 'cannot drop trigger trg1' is caused by different order of tuples in the > relation with the dependDependerIndexId relid. It is legal behavior and > we can simply replace test results. Let's look at this specific "trg1" case: """ create table trigpart (a int, b int) partition by range (a); create table trigpart1 partition of trigpart for values from (0) to (1000); create trigger trg1 after insert on trigpart for each row execute procedure trigger_nothing(); ... drop trigger trg1 on trigpart1; -- fail -ERROR: cannot drop trigger trg1 on table trigpart1 because trigger trg1 on table trigpart requires it -HINT: You can drop trigger trg1 on table trigpart instead. +ERROR: cannot drop trigger trg1 on table trigpart1 because table trigpart1 requires it +HINT: You can drop table trigpart1 instead. """ The original hint suggests "you need to drop the object on the partition parent instead of its child", which is useful. The new hint suggests "instead of dropping the trigger on the partition child, maybe drop the child itself!". That's almost an insult to the user. Now, I suppose that I could claim that it's not my responsibility to fix this, since we get the useful behavior only due to accidental implementation details. I'm not going to take that position, though. I think that I am obliged to follow both the letter and the spirit of the law. I'm almost certain that this regression test was written because somebody specifically cared about getting the original, useful message. The underlying assumptions may have been a bit shaky, but we all know how common it is for software to evolve to depend on implementation-defined details. We've all written code that does it, but hopefully it didn't hurt us much because we also wrote regression tests that exercised the useful behavior. > May be you know any another problems of the patch? Just the lack of pg_upgrade support. That is progressing nicely, though. I'll probably have that part in the next revision of the patch. I've found what looks like a workable approach, though I need to work on a testing strategy for pg_upgrade. -- Peter Geoghegan
pgsql-hackers by date: