postgresql/contrib
Tom Lane c7b3539599 Fix non-equivalence of VARIADIC and non-VARIADIC function call formats.
For variadic functions (other than VARIADIC ANY), the syntaxes foo(x,y,...)
and foo(VARIADIC ARRAY[x,y,...]) should be considered equivalent, since the
former is converted to the latter at parse time.  They have indeed been
equivalent, in all releases before 9.3.  However, commit 75b39e790 made an
ill-considered decision to record which syntax had been used in FuncExpr
nodes, and then to make equal() test that in checking node equality ---
which caused the syntaxes to not be seen as equivalent by the planner.
This is the underlying cause of bug #9817 from Dmitry Ryabov.

It might seem that a quick fix would be to make equal() disregard
FuncExpr.funcvariadic, but the same commit made that untenable, because
the field actually *is* semantically significant for some VARIADIC ANY
functions.  This patch instead adopts the approach of redefining
funcvariadic (and aggvariadic, in HEAD) as meaning that the last argument
is a variadic array, whether it got that way by parser intervention or was
supplied explicitly by the user.  Therefore the value will always be true
for non-ANY variadic functions, restoring the principle of equivalence.
(However, the planner will continue to consider use of VARIADIC as a
meaningful difference for VARIADIC ANY functions, even though some such
functions might disregard it.)

In HEAD, this change lets us simplify the decompilation logic in
ruleutils.c, since the funcvariadic/aggvariadic flag tells directly whether
to print VARIADIC.  However, in 9.3 we have to continue to cope with
existing stored rules/views that might contain the previous definition.
Fortunately, this just means no change in ruleutils.c, since its existing
behavior effectively ignores funcvariadic for all cases other than VARIADIC
ANY functions.

In HEAD, bump catversion to reflect the fact that FuncExpr.funcvariadic
changed meanings; this is sort of pro forma, since I don't believe any
built-in views are affected.

Unfortunately, this patch doesn't magically fix everything for affected
9.3 users.  After installing 9.3.5, they might need to recreate their
rules/views/indexes containing variadic function calls in order to get
everything consistent with the new definition.  As in the cited bug,
the symptom of a problem would be failure to use a nominally matching
index that has a variadic function call in its definition.  We'll need
to mention this in the 9.3.5 release notes.
2014-04-03 22:02:24 -04:00
..
adminpack Update copyright for 2014 2014-01-07 16:05:30 -05:00
auth_delay Limit values of archive_timeout, post_auth_delay, auth_delay.milliseconds. 2012-11-18 17:15:06 -05:00
auto_explain auto_explain: Add logging of trigger execution 2014-03-04 15:31:18 -03:00
btree_gin Throw a useful error message if an extension script file is fed to psql. 2011-10-12 15:45:03 -04:00
btree_gist pgindent run for release 9.3 2013-05-29 16:58:43 -04:00
chkpass Prevent potential overruns of fixed-size buffers. 2014-02-17 11:20:21 -05:00
citext Remove dependency on database encoding in citext regression test. 2014-02-27 14:58:47 -05:00
cube Use appendStringInfoString instead of appendStringInfo where possible. 2013-10-31 10:55:59 -04:00
dblink Update copyright for 2014 2014-01-07 16:05:30 -05:00
dict_int Update copyright for 2014 2014-01-07 16:05:30 -05:00
dict_xsyn Update copyright for 2014 2014-01-07 16:05:30 -05:00
dummy_seclabel Update copyright for 2014 2014-01-07 16:05:30 -05:00
earthdistance Throw a useful error message if an extension script file is fed to psql. 2011-10-12 15:45:03 -04:00
file_fdw Provide a FORCE NULL option to COPY in CSV mode. 2014-03-04 17:31:59 -05:00
fuzzystrmatch Update copyright for 2014 2014-01-07 16:05:30 -05:00
hstore De-anonymize the union in JsonbValue. 2014-04-02 14:30:08 -04:00
intagg Throw a useful error message if an extension script file is fed to psql. 2011-10-12 15:45:03 -04:00
intarray Predict integer overflow to avoid buffer overruns. 2014-02-17 09:33:31 -05:00
isn Fix calculation of ISMN check digit. 2014-01-13 15:43:29 +02:00
lo Defend against bad trigger definitions in contrib/lo's lo_manage() trigger. 2013-11-23 22:46:43 -05:00
ltree Predict integer overflow to avoid buffer overruns. 2014-02-17 09:33:31 -05:00
oid2name Centralize getopt-related declarations in a new header file pg_getopt.h. 2014-02-15 14:31:30 -05:00
pageinspect pageinspect: Use new pg_lsn datatype. 2014-03-03 07:15:04 -05:00
passwordcheck Update copyright for 2014 2014-01-07 16:05:30 -05:00
pg_archivecleanup Remove MinGW readdir/errno bug workaround fixed on 2003-10-10 2014-03-21 13:47:37 -04:00
pg_buffercache Relax the requirement that all lwlocks be stored in a single array. 2014-01-27 11:07:44 -05:00
pg_freespacemap Throw a useful error message if an extension script file is fed to psql. 2011-10-12 15:45:03 -04:00
pg_prewarm Update copyright for 2014 2014-01-07 16:05:30 -05:00
pg_standby Remove MinGW readdir/errno bug workaround fixed on 2003-10-10 2014-03-21 13:47:37 -04:00
pg_stat_statements Prefer pg_any_to_server/pg_server_to_any over pg_do_encoding_conversion. 2014-02-23 16:59:05 -05:00
pg_test_fsync pg_test_fsync: add C comment about direct I/O and write size failure 2014-02-12 15:38:29 -05:00
pg_test_timing Remove undocumented -h (help) option 2013-07-01 12:40:33 -04:00
pg_trgm Fix possible buffer overrun in contrib/pg_trgm. 2014-01-13 13:07:10 -05:00
pg_upgrade Revert "Secure Unix-domain sockets of "make check" temporary clusters." 2014-03-29 03:12:00 -04:00
pg_upgrade_support Update copyright for 2014 2014-01-07 16:05:30 -05:00
pg_xlogdump Use pg_usleep() instead of plain sleep(), to fix Windows build 2014-03-26 15:25:39 +02:00
pgbench pgbench: Fix help message 2014-02-27 21:52:21 -05:00
pgcrypto Fix typos in comments. 2014-03-17 20:47:28 +09:00
pgrowlocks pgrowlocks: Use GetActiveSnapshot() rather than SnapshotNow. 2013-07-22 16:21:14 -04:00
pgstattuple Compress GIN posting lists, for smaller index size. 2014-01-22 19:20:58 +02:00
postgres_fdw Fix non-equivalence of VARIADIC and non-VARIADIC function call formats. 2014-04-03 22:02:24 -04:00
seg Fix contrib/cube and contrib/seg to build with bison 3.0. 2013-07-29 10:42:37 -04:00
sepgsql Fix typo in comment. 2014-04-01 09:27:37 +03:00
spi Add use of asprintf() 2013-10-13 00:09:18 -04:00
sslinfo Prefer pg_any_to_server/pg_server_to_any over pg_do_encoding_conversion. 2014-02-23 16:59:05 -05:00
start-scripts Remove dead URL mention in OSX startup script 2013-09-04 17:04:33 -04:00
tablefunc Update copyright for 2014 2014-01-07 16:05:30 -05:00
tcn Update copyright for 2014 2014-01-07 16:05:30 -05:00
test_decoding test_decoding: Update .gitignore 2014-03-31 14:18:35 -04:00
test_parser Update copyright for 2014 2014-01-07 16:05:30 -05:00
test_shm_mq test_shm_mq: Improve regression tests. 2014-03-20 08:48:22 -04:00
tsearch2 Update copyright for 2014 2014-01-07 16:05:30 -05:00
unaccent Update copyright for 2014 2014-01-07 16:05:30 -05:00
uuid-ossp Update copyright for 2014 2014-01-07 16:05:30 -05:00
vacuumlo Centralize getopt-related declarations in a new header file pg_getopt.h. 2014-02-15 14:31:30 -05:00
worker_spi Fix some more bugs in signal handlers and process shutdown logic. 2014-02-01 16:21:23 -05:00
xml2 Split tuple struct defs from htup.h to htup_details.h 2012-08-30 16:52:35 -04:00
Makefile Introduce logical decoding. 2014-03-03 16:32:18 -05:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00
contrib-global.mk Remove cvs keywords from all files. 2010-09-20 22:08:53 +02: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.