pgsql: Improve BRIN infra, minmax opclass and regression test

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Improve BRIN infra, minmax opclass and regression test
Date: 2015-05-07 16:02:27
Message-ID: E1YqOFn-0006HD-Qj@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Improve BRIN infra, minmax opclass and regression test

The minmax opclass was using the wrong support functions when
cross-datatypes queries were run. Instead of trying to fix the
pg_amproc definitions (which apparently is not possible), use the
already correct pg_amop entries instead. This requires jumping through
more hoops (read: extra syscache lookups) to obtain the underlying
functions to execute, but it is necessary for correctness.

Author: Emre Hasegeli, tweaked by Álvaro
Review: Andreas Karlsson

Also change BrinOpcInfo to record each stored type's typecache entry
instead of just the OID. Turns out that the full type cache is
necessary in brin_deform_tuple: the original code used the indexed
type's byval and typlen properties to extract the stored tuple, which is
correct in Minmax; but in other implementations that want to store
something different, that's wrong. The realization that this is a bug
comes from Emre also, but I did not use his patch.

I also adopted Emre's regression test code (with smallish changes),
which is more complete.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/db5f98ab4fa44bc563ec62d7b1aada4fc276d9b2

Modified Files
--------------
contrib/pageinspect/brinfuncs.c | 2 +-
doc/src/sgml/brin.sgml | 4 +-
src/backend/access/brin/brin_minmax.c | 154 +++++++++++++++-----------
src/backend/access/brin/brin_tuple.c | 6 +-
src/include/access/brin_internal.h | 7 +-
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_amproc.h | 164 ----------------------------
src/include/catalog/pg_opclass.h | 54 +++++-----
src/test/regress/expected/brin.out | 188 ++++++++++++++++++++------------
src/test/regress/sql/brin.sql | 192 +++++++++++++++++++++------------
10 files changed, 369 insertions(+), 404 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2015-05-07 22:25:44 pgsql: Represent columns requiring insert and update privileges indente
Previous Message Robert Haas 2015-05-07 15:19:49 pgsql: Fix incorrect math in DetermineSafeOldestOffset.