Re: amcheck: detect duplicate PostingItem keys in GIN posting trees
Re: amcheck: detect duplicate PostingItem keys in GIN posting trees
От:
Sofia Kopikova <s.kopikova@postgrespro.ru>
Дата:
On 7/15/26 15:00, Stepan Neretin wrote: > Hi, > > gin_index_check() compares adjacent separator keys on posting-tree > internal pages with ItemPointerCompare(...) < 0, so it reports > out-of-order keys but misses duplicates. > > Equal separators should not occur: each PostingItem key is the child > page's right bound (dataPrepareDownlink), and leaf TIDs are strictly > increasing, so siblings must be strictly ascending. dataLocateItem > also treats equal keys as an exact match to that downlink. Entry-tree > checks already reject equals (>= 0); posting trees should do the same. > > The attached patch changes the comparison to <= 0 and adds a TAP test > that corrupts two adjacent keys to be equal. > > > Best regards, Stepan Neretin. Thanks for your patch, Stepan! The fix itself looks good to me, but why don't you make your test in the same style as other tests? I mean, make 'test' relation name and '2' block number perl variables, like it's done in the tests above. -- regards, Sofia Kopikova Postgres Professional
amcheck: detect duplicate PostingItem keys in GIN posting trees
От:
Stepan Neretin <slpmcf@gmail.com>
Дата:
Hi,
gin_index_check() compares adjacent separator keys on posting-tree
internal pages with ItemPointerCompare(...) < 0, so it reports
out-of-order keys but misses duplicates.
Equal separators should not occur: each PostingItem key is the child
page's right bound (dataPrepareDownlink), and leaf TIDs are strictly
increasing, so siblings must be strictly ascending. dataLocateItem
also treats equal keys as an exact match to that downlink. Entry-tree
checks already reject equals (>= 0); posting trees should do the same.
The attached patch changes the comparison to <= 0 and adds a TAP test
that corrupts two adjacent keys to be equal.
Best regards, Stepan Neretin.
gin_index_check() compares adjacent separator keys on posting-tree
internal pages with ItemPointerCompare(...) < 0, so it reports
out-of-order keys but misses duplicates.
Equal separators should not occur: each PostingItem key is the child
page's right bound (dataPrepareDownlink), and leaf TIDs are strictly
increasing, so siblings must be strictly ascending. dataLocateItem
also treats equal keys as an exact match to that downlink. Entry-tree
checks already reject equals (>= 0); posting trees should do the same.
The attached patch changes the comparison to <= 0 and adds a TAP test
that corrupts two adjacent keys to be equal.
Best regards, Stepan Neretin.