Re: amcheck: detect duplicate PostingItem keys in GIN posting trees

From: Stepan Neretin <slpmcf(at)gmail(dot)com>
To: Sofia Kopikova <s(dot)kopikova(at)postgrespro(dot)ru>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: amcheck: detect duplicate PostingItem keys in GIN posting trees
Date: 2026-07-24 15:24:36
Message-ID: CA+Yyo5SpKLPXibfCue6RxKN2ZXYX==rsczeAbxUMKxPqv8B=QQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jul 16, 2026 at 11:25 PM Sofia Kopikova <s(dot)kopikova(at)postgrespro(dot)ru>
wrote:

> 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
>
>
Hi Sofia,

Thanks for the review!

I've updated the TAP test to use $relname / $blkno like the other tests
in the file. Attached is v2.

Best regards,
Stepan Neretin

Attachment Content-Type Size
v2-0001-amcheck-Detect-duplicate-PostingItem-keys-in-GIN-pos.patch text/x-patch 3.0 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Stepan Neretin 2026-07-24 15:29:36 Fix archive restore race that could unlink WAL before rename
Previous Message Хамидуллин Рустам 2026-07-24 15:12:03 Re: glibc qsort() vulnerability