postgresql/contrib
Tom Lane 9aab83fc50 Redesign get_attstatsslot()/free_attstatsslot() for more safety and speed.
The mess cleaned up in commit da0759600 is clear evidence that it's a
bug hazard to expect the caller of get_attstatsslot()/free_attstatsslot()
to provide the correct type OID for the array elements in the slot.
Moreover, we weren't even getting any performance benefit from that,
since get_attstatsslot() was extracting the real type OID from the array
anyway.  So we ought to get rid of that requirement; indeed, it would
make more sense for get_attstatsslot() to pass back the type OID it found,
in case the caller isn't sure what to expect, which is likely in binary-
compatible-operator cases.

Another problem with the current implementation is that if the stats array
element type is pass-by-reference, we incur a palloc/memcpy/pfree cycle
for each element.  That seemed acceptable when the code was written because
we were targeting O(10) array sizes --- but these days, stats arrays are
almost always bigger than that, sometimes much bigger.  We can save a
significant number of cycles by doing one palloc/memcpy/pfree of the whole
array.  Indeed, in the now-probably-common case where the array is toasted,
that happens anyway so this method is basically free.  (Note: although the
catcache code will inline any out-of-line toasted values, it doesn't
decompress them.  At the other end of the size range, it doesn't expand
short-header datums either.  In either case, DatumGetArrayTypeP would have
to make a copy.  We do end up using an extra array copy step if the element
type is pass-by-value and the array length is neither small enough for a
short header nor large enough to have suffered compression.  But that
seems like a very acceptable price for winning in pass-by-ref cases.)

Hence, redesign to take these insights into account.  While at it,
convert to an API in which we fill a struct rather than passing a bunch
of pointers to individual output arguments.  That will make it less
painful if we ever want further expansion of what get_attstatsslot can
pass back.

It's certainly arguable that this is new development and not something to
push post-feature-freeze.  However, I view it as primarily bug-proofing
and therefore something that's better to have sooner not later.  Since
we aren't quite at beta phase yet, let's put it in.

Discussion: https://postgr.es/m/16364.1494520862@sss.pgh.pa.us
2017-05-13 15:14:39 -04:00
..
adminpack Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
amcheck amcheck: Harden tests against concurrent autovacuums. 2017-03-14 13:07:38 -07:00
auth_delay Consistently declare timestamp variables as TimestampTz. 2017-02-23 15:57:08 -05:00
auto_explain Allow for parallel execution whenever ExecutorRun() is done only once. 2017-03-23 13:14:36 -04:00
bloom Rename WAL-related functions and views to use "lsn" not "location". 2017-05-11 11:49:59 -04:00
btree_gin Add btree_gin support for enum types 2017-03-21 11:04:17 -04:00
btree_gist Add btree_gist support for enum types. 2017-03-21 10:43:27 -04:00
chkpass Further cleanup from the strong-random patch. 2016-12-12 11:55:32 +02:00
citext Optimize joins when the inner relation can be proven unique. 2017-04-07 22:20:13 -04:00
cube Fix typos in comments. 2017-02-06 11:33:58 +02:00
dblink dblink: Small code rearrangement for clarity 2017-04-05 09:03:11 -04: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 Remove support for version-0 calling conventions. 2017-03-30 06:25:46 -07:00
file_fdw Reset API of clause_selectivity() 2017-04-06 19:10:51 -04:00
fuzzystrmatch Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
hstore Assume deconstruct_array() outputs are untoasted. 2017-03-12 19:35:31 -04:00
hstore_plperl Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
hstore_plpython Drop support for Python 2.3 2017-02-21 09:49:22 -05:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Redesign get_attstatsslot()/free_attstatsslot() for more safety and speed. 2017-05-13 15:14:39 -04:00
isn Fix typos in comments. 2017-02-06 11:33:58 +02:00
lo Move atooid() definition to a central place 2017-03-01 11:55:28 -05:00
ltree Spelling fixes 2017-03-14 12:58:39 -04:00
ltree_plpython Code review for avoidance of direct cross-module links. 2017-02-02 11:21:16 -05:00
oid2name Remove useless trailing spaces in queries in C strings 2017-04-13 23:47:46 -04:00
pageinspect Clean up manipulations of hash indexes' hasho_flag field. 2017-04-14 17:04:25 -04:00
passwordcheck Remove support for password_encryption='off' / 'plain'. 2017-05-08 11:26:07 +03:00
pg_buffercache Default monitoring roles 2017-03-30 14:18:53 -04:00
pg_freespacemap Default monitoring roles 2017-03-30 14:18:53 -04:00
pg_prewarm Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
pg_standby Fix new warnings from GCC 7 2017-04-17 13:59:46 -04:00
pg_stat_statements Improve castNode notation by introducing list-extraction-specific variants. 2017-04-10 13:51:53 -04:00
pg_trgm Further fix pg_trgm's extraction of trigrams from regular expressions. 2017-04-14 14:52:21 -04:00
pg_visibility Default monitoring roles 2017-03-30 14:18:53 -04:00
pgcrypto Spelling fixes in code comments 2017-03-14 12:58:39 -04:00
pgrowlocks Fix AclResult vs bool type mix-up 2017-04-06 11:32:07 -04:00
pgstattuple Clean up manipulations of hash indexes' hasho_flag field. 2017-04-14 17:04:25 -04:00
postgres_fdw postgres_fdw: Fix join push down with extensions 2017-04-24 22:50:07 -04:00
seg Move contrib/seg to only use V1 calling conventions. 2017-03-30 06:25:46 -07:00
sepgsql Fix whitespace 2017-04-10 11:18:15 -04:00
spi Spelling fixes in code comments 2017-03-14 12:58:39 -04:00
sslinfo Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04: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 Rename WAL-related functions and views to use "lsn" not "location". 2017-05-11 11:49:59 -04: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 Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
uuid-ossp Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
vacuumlo Fix hard-coded relkind constants in assorted other files. 2017-03-09 23:36:52 -05:00
xml2 Use wrappers of PG_DETOAST_DATUM_PACKED() more. 2017-03-12 19:35:34 -04:00
Makefile Add amcheck extension to contrib. 2017-03-09 16:33:02 -08: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.