postgresql/contrib
Tom Lane 86d911ec0f Allow index AMs to cache data across aminsert calls within a SQL command.
It's always been possible for index AMs to cache data across successive
amgettuple calls within a single SQL command: the IndexScanDesc.opaque
field is meant for precisely that.  However, no comparable facility
exists for amortizing setup work across successive aminsert calls.
This patch adds such a feature and teaches GIN, GIST, and BRIN to use it
to amortize catalog lookups they'd previously been doing on every call.
(The other standard index AMs keep everything they need in the relcache,
so there's little to improve there.)

For GIN, the overall improvement in a statement that inserts many rows
can be as much as 10%, though it seems a bit less for the other two.
In addition, this makes a really significant difference in runtime
for CLOBBER_CACHE_ALWAYS tests, since in those builds the repeated
catalog lookups are vastly more expensive.

The reason this has been hard up to now is that the aminsert function is
not passed any useful place to cache per-statement data.  What I chose to
do is to add suitable fields to struct IndexInfo and pass that to aminsert.
That's not widening the index AM API very much because IndexInfo is already
within the ken of ambuild; in fact, by passing the same info to aminsert
as to ambuild, this is really removing an inconsistency in the AM API.

Discussion: https://postgr.es/m/27568.1486508680@sss.pgh.pa.us
2017-02-09 11:52:12 -05:00
..
adminpack Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
auth_delay Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
auto_explain Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
bloom Allow index AMs to cache data across aminsert calls within a SQL command. 2017-02-09 11:52:12 -05:00
btree_gin Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
btree_gist Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
chkpass Further cleanup from the strong-random patch. 2016-12-12 11:55:32 +02:00
citext Move some things from builtins.h to new header files 2017-01-20 20:29:53 -05:00
cube Fix typos in comments. 2017-02-06 11:33:58 +02:00
dblink Move some things from builtins.h to new header files 2017-01-20 20:29:53 -05:00
dict_int Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
dict_xsyn Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
earthdistance Fix typos in comments. 2017-02-06 11:33:58 +02:00
file_fdw Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
fuzzystrmatch Move some things from builtins.h to new header files 2017-01-20 20:29:53 -05:00
hstore Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
hstore_plperl Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
hstore_plpython Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
isn Fix typos in comments. 2017-02-06 11:33:58 +02:00
lo Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
ltree Fix typos in comments. 2017-02-06 11:33:58 +02:00
ltree_plpython Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
oid2name Simplify correct use of simple_prompt(). 2016-08-30 17:02:02 -04:00
pageinspect Cache hash index's metapage in rel->rd_amcache. 2017-02-07 12:35:45 -05:00
passwordcheck Replace isMD5() with a more future-proof way to check if pw is encrypted. 2017-02-01 13:11:37 +02:00
pg_buffercache Don't bother to lock bufmgr partitions in pg_buffercache. 2016-09-29 13:16:30 +03:00
pg_freespacemap Update pg_freespacemap extension for parallel query. 2016-06-09 17:18:16 -04:00
pg_prewarm Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
pg_standby Fix typos in comments. 2017-02-06 11:33:58 +02:00
pg_stat_statements Fix typos in comments. 2017-02-06 11:33:58 +02:00
pg_trgm Fix typos in comments. 2017-02-06 11:33:58 +02:00
pg_visibility Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
pgcrypto Fix typos in comments. 2017-02-06 11:33:58 +02:00
pgrowlocks Move some things from builtins.h to new header files 2017-01-20 20:29:53 -05:00
pgstattuple pgstattuple: Add pgstathashindex. 2017-02-03 14:37:16 -05:00
postgres_fdw Fix typos in comments. 2017-02-06 11:33:58 +02:00
seg Fix typos in comments. 2017-02-06 11:33:58 +02:00
sepgsql Fix typo also in expected output. 2017-02-06 12:04:04 +02:00
spi Fix typos in comments. 2017-02-06 11:33:58 +02:00
sslinfo Support OpenSSL 1.1.0. 2016-09-15 14:42:29 +03:00
start-scripts Fix typos in comments. 2017-02-06 11:33:58 +02:00
tablefunc Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
tcn Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
test_decoding Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
tsearch2 Fix typos in comments. 2017-02-06 11:33:58 +02:00
tsm_system_rows Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
tsm_system_time Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
unaccent Move some things from builtins.h to new header files 2017-01-20 20:29:53 -05:00
uuid-ossp Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
vacuumlo Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
xml2 Fix typos in comments. 2017-02-06 11:33:58 +02:00
Makefile Bloom index contrib module 2016-04-01 16:42:24 +03:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05: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.