Re: WIP: Covering + unique indexes.

Anastasia Lubennikova <a.lubennikova@postgrespro.ru>

From: Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
To: Andres Freund <andres@anarazel.de>
Cc: Teodor Sigaev <teodor@sigaev.ru>, pgsql-hackers@postgresql.org, Anastasia Lubennikova <lubennikovaav@gmail.com>, Peter Geoghegan <pg@heroku.com>, David Steele <david@pgmasters.net>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Aleksander Alekseev <a.alekseev@postgrespro.ru>
Date: 2017-03-31T18:04:46Z
Lists: pgsql-hackers
31.03.2017 20:47, Andres Freund:
>>> Maybe it would be better to modify index_form_tuple() to accept a new
>>> argument with a number of attributes, then you can just Assert that
>>> this number is never higher than the number of attributes in the
>>> TupleDesc.
>> Good point.
>> I agree that this function is a bit strange. I have to set
>> tupdesc->nattrs to support compatibility with index_form_tuple().
>> I didn't want to add neither a new field to tupledesc nor a new
>> parameter to index_form_tuple(), because they are used widely.
>>
>>
>> But I haven't considered the possibility of index_form_tuple() failure.
>> Fixed in this version of the patch. Now it creates a copy of tupledesc to
>> pass it to index_form_tuple.
> That seems like it'd actually be a noticeable increase in memory
> allocator overhead.  I think we should just add (as just proposed in
> separate thread), a _extended version of it that allows to specify the
> number of columns.

The function is called not that often. Only once per page split for 
indexes with included columns.
Doesn't look like dramatic overhead. So I decided that a wrapper 
function would be more appropriate than refactoring of all 
index_form_tuple() calls.
But index_form_tuple_extended() looks like a better solution.

-- 
Anastasia Lubennikova
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

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