postgresql/contrib
Tom Lane 687f096ea9 Make PL/Python handle domain-type conversions correctly.
Fix PL/Python so that it can handle domains over composite, and so that
it enforces domain constraints correctly in other cases that were not
always done properly before.  Notably, it didn't do arrays of domains
right (oversight in commit c12d570fa), and it failed to enforce domain
constraints when returning a composite type containing a domain field,
and if a transform function is being used for a domain's base type then
it failed to enforce domain constraints on the result.  Also, in many
places it missed checking domain constraints on null values, because
the plpy_typeio code simply wasn't called for Py_None.

Rather than try to band-aid these problems, I made a significant
refactoring of the plpy_typeio logic.  The existing design of recursing
for array and composite members is extended to also treat domains as
containers requiring recursion, and the APIs for the module are cleaned
up and simplified.

The patch also modifies plpy_typeio to rely on the typcache more than
it did before (which was pretty much not at all).  This reduces the
need for repetitive lookups, and lets us get rid of an ad-hoc scheme
for detecting changes in composite types.  I added a couple of small
features to typcache to help with that.

Although some of this is fixing bugs that long predate v11, I don't
think we should risk a back-patch: it's a significant amount of code
churn, and there've been no complaints from the field about the bugs.

Tom Lane, reviewed by Anthony Bykov

Discussion: https://postgr.es/m/24449.1509393613@sss.pgh.pa.us
2017-11-16 16:23:04 -05:00
..
adminpack adminpack: Add test suite 2017-09-14 22:22:59 -04:00
amcheck Minor code-cleanliness improvements for btree. 2017-09-18 16:36:28 -04:00
auth_delay Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
auto_explain Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
bloom Tighten test in contrib/bloom/t/001_wal.pl. 2017-11-10 12:30:01 -05:00
btree_gin Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
btree_gist Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
citext Disable multi-byte citext tests 2017-09-19 15:31:37 -04:00
cube Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
dblink Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
dict_int Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
dict_xsyn Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
earthdistance Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
file_fdw Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
fuzzystrmatch Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
hstore Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
hstore_plperl Make DatumGetFoo/PG_GETARG_FOO/PG_RETURN_FOO macro names more consistent. 2017-09-18 15:21:23 -04:00
hstore_plpython Make PL/Python handle domain-type conversions correctly. 2017-11-16 16:23:04 -05:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
isn isn: Fix debug code 2017-09-14 22:23:00 -04:00
lo lo: Add test suite 2017-09-14 22:22:59 -04:00
ltree Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
ltree_plpython Make DatumGetFoo/PG_GETARG_FOO/PG_RETURN_FOO macro names more consistent. 2017-09-18 15:21:23 -04:00
oid2name Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pageinspect Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07:00
passwordcheck Simplify new test suite handling of passwordcheck 2017-11-02 12:57:04 -04:00
pg_buffercache Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_freespacemap Default monitoring roles 2017-03-30 14:18:53 -04:00
pg_prewarm Add background worker type 2017-09-29 11:08:24 -04:00
pg_standby Fix assorted infelicities in new SetWALSegSize() function. 2017-09-24 12:05:06 -04:00
pg_stat_statements pg_stat_statements: Add a comment about the dangers of padding bytes. 2017-10-20 09:44:03 -04:00
pg_trgm Change TRUE/FALSE to true/false 2017-11-08 11:37:28 -05:00
pg_visibility Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
pgcrypto Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
pgrowlocks Teach pgrowlocks to check relkind before scanning 2017-06-21 23:19:13 -04:00
pgstattuple Minor code-cleanliness improvements for btree. 2017-09-18 16:36:28 -04:00
postgres_fdw Basic partition-wise join functionality. 2017-10-06 11:11:10 -04:00
seg Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
sepgsql Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
spi Document and use SPI_result_code_string() 2017-10-04 22:14:21 -04:00
sslinfo Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
start-scripts start-scripts: switch to $PGUSER before opening $PGLOG. 2017-11-06 07:11:10 -08:00
tablefunc Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07:00
tcn Change tupledesc->attrs[n] to TupleDescAttr(tupledesc, n). 2017-08-20 11:19:07 -07:00
test_decoding Fix crash when logical decoding is invoked from a PL function. 2017-10-06 19:18:58 -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 Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
uuid-ossp Add some const decorations to prototypes 2017-11-10 13:38:57 -05:00
vacuumlo Initial pgindent run with pg_bsd_indent version 2.0. 2017-06-21 14:39:04 -04:00
xml2 Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
Makefile Remove contrib/chkpass 2017-09-22 11:49:48 -04: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.