postgresql/contrib
Peter Geoghegan c9c0589fda Optimize nbtree backward scan boundary cases.
Teach _bt_binsrch (and related helper routines like _bt_search and
_bt_compare) about the initial positioning requirements of backward
scans.  Routines like _bt_binsrch already know all about "nextkey"
searches, so it seems natural to teach them about "goback"/backward
searches, too.  These concepts are closely related, and are much easier
to understand when discussed together.

Now that certain implementation details are hidden from _bt_first, it's
straightforward to add a new optimization: backward scans using the <
strategy now avoid extra leaf page accesses in certain "boundary cases".
Consider the following example, which uses the tenk1 table (and its
tenk1_hundred index) from the standard regression tests:

SELECT * FROM tenk1 WHERE hundred < 12 ORDER BY hundred DESC LIMIT 1;

Before this commit, nbtree would scan two leaf pages, even though it was
only really necessary to scan one leaf page.  We'll now descend straight
to the leaf page containing a (12, -inf) high key instead.  The scan
will locate matching non-pivot tuples with "hundred" values starting
from the value 11.  The scan won't waste a page access on the right
sibling leaf page, which cannot possibly contain any matching tuples.

You can think of the optimization added by this commit as disabling an
optimization (the _bt_compare "!pivotsearch" behavior that was added to
Postgres 12 in commit dd299df8) for a small subset of cases where it was
always counterproductive.

Equivalently, you can think of the new optimization as extending the
"pivotsearch" behavior that page deletion by VACUUM has long required
(since the aforementioned Postgres 12 commit went in) to other, similar
cases.  Obviously, this isn't strictly necessary for these new cases
(unlike VACUUM, _bt_first is prepared to move the scan to the left once
on the leaf level), but the underlying principle is the same.

Author: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Matthias van de Meent <boekewurm+postgres@gmail.com>
Discussion: https://postgr.es/m/CAH2-Wz=XPzM8HzaLPq278Vms420mVSHfgs9wi5tjFKHcapZCEw@mail.gmail.com
2023-12-08 11:05:17 -08:00
..
adminpack Use "data directory" not "current directory" in error messages. 2023-03-16 12:04:08 -04:00
amcheck Optimize nbtree backward scan boundary cases. 2023-12-08 11:05:17 -08:00
auth_delay Fix copy-pasto in contrib/auth_delay/meson.build variable name. 2023-04-02 09:31:10 -07:00
auto_explain Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
basebackup_to_shell Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
basic_archive Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
bloom Allow parallel CREATE INDEX for BRIN indexes 2023-12-08 18:15:26 +01:00
bool_plperl Update copyright for 2023 2023-01-02 15:00:37 -05:00
btree_gin Support +/- infinity in the interval data type. 2023-11-14 10:58:49 +00:00
btree_gist Add trailing commas to enum definitions 2023-10-26 09:20:54 +02:00
citext citext: Allow tests to pass in OpenSSL FIPS mode 2023-11-07 07:58:14 +01:00
cube Remove distprep 2023-11-06 15:18:04 +01:00
dblink Remove redundant setting of hashkey after insertion 2023-11-30 15:25:57 +07:00
dict_int Update copyright for 2023 2023-01-02 15:00:37 -05:00
dict_xsyn Update copyright for 2023 2023-01-02 15:00:37 -05:00
earthdistance Doc: improve commentary about providing our own definitions of M_PI. 2023-01-08 16:25:33 -05:00
file_fdw Adjust file_fdw regression tests for acc95f29ef FREEZE commit 2023-11-13 14:44:39 -05:00
fuzzystrmatch Remove distprep 2023-11-06 15:18:04 +01:00
hstore Constify crc32_sz 2023-10-05 08:53:21 +02:00
hstore_plperl Update copyright for 2023 2023-01-02 15:00:37 -05:00
hstore_plpython In hstore_plpython, avoid crashing when return value isn't a mapping. 2023-04-27 11:55:06 -04:00
intagg Update copyright for 2023 2023-01-02 15:00:37 -05:00
intarray Fix another bug in parent page splitting during GiST index build. 2023-09-26 14:14:49 +03:00
isn Rework pg_input_error_message(), now renamed pg_input_error_info() 2023-02-28 08:04:13 +09:00
jsonb_plperl Update copyright for 2023 2023-01-02 15:00:37 -05:00
jsonb_plpython Update copyright for 2023 2023-01-02 15:00:37 -05:00
lo Update copyright for 2023 2023-01-02 15:00:37 -05:00
ltree Pre-beta mechanical code beautification. 2023-05-19 17:24:48 -04:00
ltree_plpython Update copyright for 2023 2023-01-02 15:00:37 -05:00
oid2name Mark options as deprecated in usage output 2023-03-02 14:36:37 +01:00
pageinspect Add empty BRIN ranges during CREATE INDEX 2023-12-08 17:14:32 +01:00
passwordcheck Allow tests to pass in OpenSSL FIPS mode (rest) 2023-11-17 17:58:39 +01:00
pg_buffercache Add pg_buffercache_usage_counts() to contrib/pg_buffercache. 2023-04-07 14:25:53 -04:00
pg_freespacemap Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_prewarm Apply quotes more consistently to GUC names in logs 2023-11-30 14:11:45 +09:00
pg_stat_statements Track statement entry timestamp in contrib/pg_stat_statements 2023-11-27 02:52:17 +02:00
pg_surgery Add trailing commas to enum definitions 2023-10-26 09:20:54 +02:00
pg_trgm Update contrib/trgm_regexp's memory management. 2023-04-08 22:09:17 +12:00
pg_visibility Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_walinspect During online checkpoints, insert XLOG_CHECKPOINT_REDO at redo point. 2023-10-19 14:47:29 -04:00
pgcrypto pgcrypto: Allow tests to pass in OpenSSL FIPS mode 2023-11-17 14:55:51 +01:00
pgrowlocks Adjust the order of the prechecks in pgrowlocks() 2023-10-31 16:42:08 +13:00
pgstattuple Diagnose !indisvalid in more SQL functions. 2023-10-30 14:46:05 -07:00
postgres_fdw Add support for deparsing semi-joins to contrib/postgres_fdw 2023-12-05 22:53:12 +02:00
seg Remove distprep 2023-11-06 15:18:04 +01:00
sepgsql meson: Fix missing dependency from install-quiet to sepgsql.sql 2023-11-17 16:29:48 -08:00
spi meson: Install missing example files 2023-11-09 15:10:43 +01:00
sslinfo Revert "Add notBefore and notAfter to SSL cert info display" 2023-07-20 17:18:12 +02:00
start-scripts Remove gratuitous references to postmaster program 2023-01-26 10:48:32 +01:00
tablefunc Update copyright for 2023 2023-01-02 15:00:37 -05:00
tcn Update copyright for 2023 2023-01-02 15:00:37 -05:00
test_decoding Add STREAM_START/STREAM_STOP for transactional messages during decoding. 2023-10-30 14:36:21 +05:30
tsm_system_rows Update copyright for 2023 2023-01-02 15:00:37 -05:00
tsm_system_time Update copyright for 2023 2023-01-02 15:00:37 -05:00
unaccent unaccent: Tweak value of PYTHON when building without Python support 2023-09-27 14:40:23 +09:00
uuid-ossp Allow tests to pass in OpenSSL FIPS mode (rest) 2023-11-17 17:58:39 +01:00
vacuumlo Add trailing commas to enum definitions 2023-10-26 09:20:54 +02:00
xml2 Update copyright for 2023 2023-01-02 15:00:37 -05:00
contrib-global.mk
Makefile Remove the "snapshot too old" feature. 2023-09-05 19:53:43 +12:00
meson.build meson: Install missing example files 2023-11-09 15:10:43 +01:00
README

The PostgreSQL contrib tree
---------------------------

This subtree contains porting tools, analysis utilities, and plug-in
features that are not part of the core PostgreSQL system, mainly
because they address a limited audience or are too experimental to be
part of the main source tree.  This does not preclude their
usefulness.

User documentation for each module appears in the main SGML
documentation.

When building from the source distribution, these modules are not
built automatically, unless you build the "world" target.  You can
also build and install them all by running "make all" and "make
install" in this directory; or to build and install just one selected
module, do the same in that module's subdirectory.

Some directories supply new user-defined functions, operators, or
types.  To make use of one of these modules, after you have installed
the code you need to register the new SQL objects in the database
system by executing a CREATE EXTENSION command.  In a fresh database,
you can simply do

    CREATE EXTENSION module_name;

See the PostgreSQL documentation for more information about this
procedure.