Re: [HACKERS] WIP: Covering + unique indexes.

Peter Geoghegan <pg@bowt.ie>

From: Peter Geoghegan <pg@bowt.ie>
To: Michael Paquier <michael.paquier@gmail.com>
Cc: Andrey Borodin <x4mmm@yandex-team.ru>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2017-11-29T03:45:53Z
Lists: pgsql-hackers
On Tue, Nov 28, 2017 at 6:16 PM, Michael Paquier
<michael.paquier@gmail.com> wrote:
> On Sun, Nov 12, 2017 at 8:40 PM, Andrey Borodin <x4mmm@yandex-team.ru> wrote:
>> Postgres crashes:
>> TRAP: FailedAssertion("!(((const void*)(&isNull) != ((void*)0)) && (scankey->sk_attno) > 0)", File: "nbtsearch.c", Line: 466)
>>
>> May be I'm doing something wrong or amcheck support will go with different patch?
>
> Usually amcheck complaining is a sign of other symptoms. I am marking
> this patch as returned with feedback for now as no updates have been
> provided after two weeks.

It looks like amcheck needs to be patched -- a simple oversight.
amcheck is probably calling _bt_compare() without realizing that
internal pages don't have the extra attributes (just leaf pages,
although they should also not participate in comparisons in respect of
included/extra columns). There were changes to amcheck at one point in
the past. That must have slipped through again. I don't think it's
that complicated.

BTW, it would probably be a good idea to use the new Github version's
"heapallindexed" verification [1] for testing this patch. Anastasia
will need to patch the externally maintained amcheck to do this, but
it's probably no extra work, because this is already needed for
contrib/amcheck, and because the heapallindexed check doesn't actually
care about index structure at all.

[1] https://github.com/petergeoghegan/amcheck#optional-heapallindexed-verification
-- 
Peter Geoghegan


Commits

  1. Adjust INCLUDE index truncation comments and code.

  2. Add commentary explaining why MaxIndexTuplesPerPage calculation is safe.

  3. Indexes with INCLUDE columns and their support in B-tree

  4. Add amcheck verification of heap relations belonging to btree indexes.

  5. Doc: move info for btree opclass implementors into main documentation.

  6. Doc: mention that you can't PREPARE TRANSACTION after NOTIFY.

  7. Remove dedicated B-tree root-split record types.

  8. Restructure index access method API to hide most of it at the C level.

  9. Split _bt_insertonpg to two functions.

  10. Major overhaul of btree index code. Eliminate special BTP_CHAIN logic for