pgsql: Adjust INCLUDE index truncation comments and code.

From: Teodor Sigaev <teodor(at)sigaev(dot)ru>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Adjust INCLUDE index truncation comments and code.
Date: 2018-04-19 05:46:19
Message-ID: E1f92Oh-0004CS-7E@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Adjust INCLUDE index truncation comments and code.

Add several assertions that ensure that we're dealing with a pivot tuple
without non-key attributes where that's expected. Also, remove the
assertion within _bt_isequal(), restoring the v10 function signature. A
similar check will be performed for the page highkey within
_bt_moveright() in most cases. Also avoid dropping all objects within
regression tests, to increase pg_dump test coverage for INCLUDE indexes.

Rather than using infrastructure that's generally intended to be used
with reference counted heap tuple descriptors during truncation, use the
same function that was introduced to store flat TupleDescs in shared
memory (we use a temp palloc'd buffer). This isn't strictly necessary,
but seems more future-proof than the old approach. It also lets us
avoid including rel.h within indextuple.c, which was arguably a
modularity violation. Also, we now call index_deform_tuple() with the
truncated TupleDesc, not the source TupleDesc, since that's more robust,
and saves a few cycles.

In passing, fix a memory leak by pfree'ing truncated pivot tuple memory
during CREATE INDEX. Also pfree during a page split, just to be
consistent.

Refactor _bt_check_natts() to be more readable.

Author: Peter Geoghegan with some editorization by me
Reviewed by: Alexander Korotkov, Teodor Sigaev
Discussion: https://www.postgresql.org/message-id/CAH2-Wz%3DkCWuXeMrBCopC-tFs3FbiVxQNjjgNKdG2sHxZ5k2y3w%40mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/075aade4361b9f973172b925ddfb908a012b5796

Modified Files
--------------
contrib/amcheck/verify_nbtree.c | 71 ++++++-------
src/backend/access/common/indextuple.c | 57 ++++++----
src/backend/access/nbtree/nbtinsert.c | 80 ++++++++------
src/backend/access/nbtree/nbtpage.c | 2 +
src/backend/access/nbtree/nbtsearch.c | 59 +----------
src/backend/access/nbtree/nbtsort.c | 70 +++++++-----
src/backend/access/nbtree/nbtutils.c | 147 ++++++++++++++++++++++----
src/backend/access/nbtree/nbtxlog.c | 13 ++-
src/include/access/itup.h | 4 +-
src/include/access/nbtree.h | 92 ++++++++--------
src/test/regress/expected/index_including.out | 95 ++++++++---------
src/test/regress/expected/sanity_check.out | 6 ++
src/test/regress/sql/index_including.sql | 63 ++++++-----
13 files changed, 429 insertions(+), 330 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Teodor Sigaev 2018-04-19 06:19:38 Re: pgsql: Skip full index scan during cleanup of B-tree indexes when possi
Previous Message Tom Lane 2018-04-18 22:17:06 pgsql: Improve error detection/reporting in Catalog.pm and genbki.pl.