postgresql/contrib
Alvaro Herrera 7103ebb7aa
Add support for MERGE SQL command
MERGE performs actions that modify rows in the target table using a
source table or query. MERGE provides a single SQL statement that can
conditionally INSERT/UPDATE/DELETE rows -- a task that would otherwise
require multiple PL statements.  For example,

MERGE INTO target AS t
USING source AS s
ON t.tid = s.sid
WHEN MATCHED AND t.balance > s.delta THEN
  UPDATE SET balance = t.balance - s.delta
WHEN MATCHED THEN
  DELETE
WHEN NOT MATCHED AND s.delta > 0 THEN
  INSERT VALUES (s.sid, s.delta)
WHEN NOT MATCHED THEN
  DO NOTHING;

MERGE works with regular tables, partitioned tables and inheritance
hierarchies, including column and row security enforcement, as well as
support for row and statement triggers and transition tables therein.

MERGE is optimized for OLTP and is parameterizable, though also useful
for large scale ETL/ELT. MERGE is not intended to be used in preference
to existing single SQL commands for INSERT, UPDATE or DELETE since there
is some overhead.  MERGE can be used from PL/pgSQL.

MERGE does not support targetting updatable views or foreign tables, and
RETURNING clauses are not allowed either.  These limitations are likely
fixable with sufficient effort.  Rewrite rules are also not supported,
but it's not clear that we'd want to support them.

Author: Pavan Deolasee <pavan.deolasee@gmail.com>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Author: Amit Langote <amitlangote09@gmail.com>
Author: Simon Riggs <simon.riggs@enterprisedb.com>
Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Reviewed-by: Andres Freund <andres@anarazel.de> (earlier versions)
Reviewed-by: Peter Geoghegan <pg@bowt.ie> (earlier versions)
Reviewed-by: Robert Haas <robertmhaas@gmail.com> (earlier versions)
Reviewed-by: Japin Li <japinli@hotmail.com>
Reviewed-by: Justin Pryzby <pryzby@telsasoft.com>
Reviewed-by: Tomas Vondra <tomas.vondra@enterprisedb.com>
Reviewed-by: Zhihong Yu <zyu@yugabyte.com>
Discussion: https://postgr.es/m/CANP8+jKitBSrB7oTgT9CY2i1ObfOt36z0XMraQc+Xrz8QB0nXA@mail.gmail.com
Discussion: https://postgr.es/m/CAH2-WzkJdBuxj9PO=2QaO9-3h3xGbQPZ34kJH=HukRekwM-GZg@mail.gmail.com
Discussion: https://postgr.es/m/20201231134736.GA25392@alvherre.pgsql
2022-03-28 16:47:48 +02:00
..
adminpack Simplify coding around path_contains_parent_reference(). 2022-01-31 13:53:38 -05:00
amcheck Harden TAP tests that intentionally corrupt page checksums. 2022-03-25 14:23:26 -04:00
auth_delay Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
auto_explain Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
basebackup_to_shell Add 'basebackup_to_shell' contrib module. 2022-03-15 13:24:23 -04:00
basic_archive Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
bloom Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
bool_plperl Fix broken ruleutils support for function TRANSFORM clauses. 2021-01-25 13:03:43 -05:00
btree_gin Fix failure of btree_gin indexscans with "char" type and </<= operators. 2021-08-10 18:10:29 -04:00
btree_gist Fix results of index-only scans on btree_gist char(N) indexes. 2022-01-08 14:54:39 -05:00
citext Enable routine running of citext's UTF8-specific test cases. 2022-01-05 13:30:07 -05:00
cube Add binary I/O capability for cube datatype. 2021-03-06 12:04:05 -05:00
dblink Simplify SRFs using materialize mode in contrib/ modules 2022-03-08 10:12:22 +09:00
dict_int Update copyright for 2022 2022-01-07 19:04:57 -05:00
dict_xsyn Update copyright for 2022 2022-01-07 19:04:57 -05:00
earthdistance Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
file_fdw Add HEADER support to COPY text format 2022-01-28 09:44:47 +01:00
fuzzystrmatch Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore_plperl Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
hstore_plpython plpython: Code cleanup related to removal of Python 2 support. 2022-03-07 18:30:28 -08:00
intagg Make contrib modules' installation scripts more secure. 2020-08-10 10:44:42 -04:00
intarray Update copyright for 2022 2022-01-07 19:04:57 -05:00
isn Update copyright for 2022 2022-01-07 19:04:57 -05:00
jsonb_plperl Expose internal function for converting int64 to numeric 2020-09-09 20:16:28 +02:00
jsonb_plpython plpython: Code cleanup related to removal of Python 2 support. 2022-03-07 18:30:28 -08:00
lo Fix bogus CALLED_AS_TRIGGER() defenses. 2020-04-03 11:24:56 -04:00
ltree Fix default signature length for gist_ltree_ops 2022-03-16 11:41:18 +03:00
ltree_plpython plpython: Code cleanup related to removal of Python 2 support. 2022-03-07 18:30:28 -08:00
oid2name Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
old_snapshot Update copyright for 2022 2022-01-07 19:04:57 -05:00
pageinspect pageinspect: Add more sanity checks to prevent out-of-bound reads 2022-03-27 17:53:40 +09:00
passwordcheck Improve error handling of cryptohash computations 2022-01-11 09:55:16 +09:00
pg_buffercache Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
pg_freespacemap Add some basic regression tests for pg_freespacemap 2022-03-24 09:36:30 +09:00
pg_prewarm Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
pg_stat_statements Simplify SRFs using materialize mode in contrib/ modules 2022-03-08 10:12:22 +09:00
pg_surgery Remove xloginsert.h from xlog.h 2022-01-30 12:25:24 -03:00
pg_trgm Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
pg_visibility Remove xloginsert.h from xlog.h 2022-01-30 12:25:24 -03:00
pgcrypto pgcrypto: Remove internal padding implementation 2022-03-22 08:58:44 +01:00
pgrowlocks Simplify SRFs using materialize mode in contrib/ modules 2022-03-08 10:12:22 +09:00
pgstattuple Update copyright for 2022 2022-01-07 19:04:57 -05:00
postgres_fdw postgres_fdw: Minor cleanup for pgfdw_abort_cleanup(). 2022-03-25 15:30:00 +09:00
seg Update copyright for 2022 2022-01-07 19:04:57 -05:00
sepgsql Disallow setting bogus GUCs within an extension's reserved namespace. 2022-02-21 14:10:43 -05:00
spi Remove support for upgrading extensions from "unpackaged" state. 2020-02-19 16:59:14 -05:00
sslinfo contrib/sslinfo needs a fix too to make hamerkop happy. 2021-11-07 11:33:53 -05:00
start-scripts Remove contrib/start-scripts/osx/. 2017-11-17 12:53:20 -05:00
tablefunc Remove all traces of tuplestore_donestoring() in the C code 2022-02-17 09:52:02 +09:00
tcn Update copyright for 2022 2022-01-07 19:04:57 -05:00
test_decoding Add support for MERGE SQL command 2022-03-28 16:47:48 +02:00
tsm_system_rows Update copyright for 2022 2022-01-07 19:04:57 -05:00
tsm_system_time Update copyright for 2022 2022-01-07 19:04:57 -05:00
unaccent Make update-unicode target work in vpath builds 2022-03-25 09:47:50 +01:00
uuid-ossp Improve error handling of cryptohash computations 2022-01-11 09:55:16 +09:00
vacuumlo Replace Test::More plans with done_testing 2022-02-11 20:54:44 +01:00
xml2 Simplify SRFs using materialize mode in contrib/ modules 2022-03-08 10:12:22 +09:00
Makefile Add 'basebackup_to_shell' contrib module. 2022-03-15 13:24:23 -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.