postgresql/contrib
Tom Lane 0bea99bd92 Fix assorted issues in convert_to_scalar().
If convert_to_scalar is passed a pair of datatypes it can't cope with,
its former behavior was just to elog(ERROR).  While this is OK so far as
the core code is concerned, there's extension code that would like to use
scalarltsel/scalargtsel/etc as selectivity estimators for operators that
work on non-core datatypes, and this behavior is a show-stopper for that
use-case.  If we simply allow convert_to_scalar to return FALSE instead of
outright failing, then the main logic of scalarltsel/scalargtsel will work
fine for any operator that behaves like a scalar inequality comparison.
The lack of conversion capability will mean that we can't estimate to
better than histogram-bin-width precision, since the code will effectively
assume that the comparison constant falls at the middle of its bin.  But
that's still a lot better than nothing.  (Someday we should provide a way
for extension code to supply a custom version of convert_to_scalar, but
today is not that day.)

While poking at this issue, we noted that the existing code for handling
type bytea in convert_to_scalar is several bricks shy of a load.
It assumes without checking that if the comparison value is type bytea,
the bounds values are too; in the worst case this could lead to a crash.
It also fails to detoast the input values, so that the comparison result is
complete garbage if any input is toasted out-of-line, compressed, or even
just short-header.  I'm not sure how often such cases actually occur ---
the bounds values, at least, are probably safe since they are elements of
an array and hence can't be toasted.  But that doesn't make this code OK.

Back-patch to all supported branches, partly because author requested that,
but mostly because of the bytea bugs.  The change in API for the exposed
routine convert_network_to_scalar() is theoretically a back-patch hazard,
but it seems pretty unlikely that any third-party code is calling that
function directly.

Tomas Vondra, with some adjustments by me

Discussion: https://postgr.es/m/b68441b6-d18f-13ab-b43b-9a72188a4e02@2ndquadrant.com
2018-03-03 20:31:35 -05:00
..
adminpack Fix pg_file_write() error handling. 2017-03-12 19:36:15 -04:00
auth_delay Limit values of archive_timeout, post_auth_delay, auth_delay.milliseconds. 2012-11-18 17:15:06 -05:00
auto_explain Allow auto_explain.log_min_duration to go up to INT_MAX. 2018-02-23 14:39:23 -05:00
btree_gin Make contrib regression tests safe for Danish locale. 2016-07-21 16:52:36 -04:00
btree_gist Fix assorted issues in convert_to_scalar(). 2018-03-03 20:31:35 -05:00
chkpass Fix volatility markings of some contrib I/O functions. 2014-11-05 11:34:19 -05:00
citext Make contrib regression tests safe for Danish locale. 2016-07-21 16:52:36 -04:00
cube Fix typos in comments. 2017-02-06 11:34:28 +02:00
dblink Fix ancient connection leak in dblink 2017-03-11 13:33:22 -08:00
dict_int Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
dict_xsyn Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
dummy_seclabel Update copyrights for 2013 2013-01-01 17:15:01 -05:00
earthdistance Fix typos in comments. 2017-02-06 11:34:28 +02:00
file_fdw Fix contrib/file_fdw's expected file 2015-03-06 11:47:09 -03:00
fuzzystrmatch Add missing va_end() call to a early exit in dmetaphone.c's StringAt(). 2015-01-04 15:35:47 +01:00
hstore Avoid formally-undefined use of memcpy() in hstoreUniquePairs(). 2017-11-25 14:42:46 -05:00
intagg Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
intarray Fix -e option in contrib/intarray/bench/bench.pl. 2016-08-17 15:51:10 -04:00
isn Fix typos in comments. 2017-02-06 11:34:28 +02:00
lo Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
ltree Spelling fixes 2017-03-14 13:45:45 -04:00
oid2name Empty search_path in Autovacuum and non-psql/pgbench clients. 2018-02-26 07:39:48 -08:00
pageinspect Remove unused macros. 2016-05-02 10:09:03 +03:00
passwordcheck Update copyrights for 2013 2013-01-01 17:15:01 -05:00
pg_archivecleanup Fix new warnings from GCC 7 2017-05-15 13:31:38 -04:00
pg_buffercache Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
pg_freespacemap Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
pg_standby Fix new warnings from GCC 7 2017-05-15 13:31:38 -04:00
pg_stat_statements Avoid unlikely data-loss scenarios due to rename() without fsync. 2016-03-09 18:53:54 -08:00
pg_test_fsync Avoid depending on non-POSIX behavior of fcntl(2). 2017-04-21 15:55:56 -04:00
pg_test_timing Correctly handle test durations of more than 2147s in pg_test_timing. 2015-01-04 15:53:08 +01:00
pg_trgm Further fix pg_trgm's extraction of trigrams from regular expressions. 2017-04-14 14:52:03 -04:00
pg_upgrade Empty search_path in Autovacuum and non-psql/pgbench clients. 2018-02-26 07:39:48 -08:00
pg_upgrade_support Update copyrights for 2013 2013-01-01 17:15:01 -05:00
pg_xlogdump pg_xlogdump: Remove extra newline in error message 2017-03-08 09:59:52 -05:00
pgbench Fix "pg_bench -C -M prepared". 2016-03-16 23:18:07 -04:00
pgcrypto Rename base64 routines to avoid conflict with Solaris built-in functions. 2018-02-28 18:33:45 -05:00
pgrowlocks Fix handling of multixacts predating pg_upgrade 2016-06-24 18:29:28 -04:00
pgstattuple Remove unused macros. 2016-05-02 10:09:03 +03:00
postgres_fdw Stabilize postgres_fdw regression tests. 2017-07-21 14:20:43 -04:00
seg Fix typos in comments. 2017-02-06 11:34:28 +02:00
sepgsql Silence compiler warning in sepgsql 2017-04-06 14:24:50 -07:00
spi Fix typos in comments. 2017-02-06 11:34:28 +02:00
sslinfo Fix error message wording in previous sslinfo commit 2015-09-08 11:10:20 -03:00
start-scripts Provide modern examples of how to auto-start Postgres on macOS. 2017-11-17 12:47:44 -05:00
tablefunc Handle unexpected query results, especially NULLs, safely in connectby(). 2015-01-29 20:18:40 -05:00
tcn Remove tabs after spaces in C comments 2014-05-06 11:26:28 -04:00
test_parser Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
tsearch2 Fix typos in comments. 2017-02-06 11:34:28 +02:00
unaccent Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
uuid-ossp Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:46 +02:00
vacuumlo Empty search_path in Autovacuum and non-psql/pgbench clients. 2018-02-26 07:39:48 -08:00
worker_spi worker_spi: Call pgstat_report_stat. 2016-09-28 12:40:23 -04:00
xml2 Fix typos in comments. 2017-02-06 11:34:28 +02:00
contrib-global.mk Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
Makefile contrib/Makefile also needs updated 2013-02-22 18:56:42 -03:00
README Update contrib/README 2012-04-14 09:29:54 +03:00

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 "gmake all" and "gmake
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.