postgresql/src/tools
Robert Haas f0e44751d7 Implement table partitioning.
Table partitioning is like table inheritance and reuses much of the
existing infrastructure, but there are some important differences.
The parent is called a partitioned table and is always empty; it may
not have indexes or non-inherited constraints, since those make no
sense for a relation with no data of its own.  The children are called
partitions and contain all of the actual data.  Each partition has an
implicit partitioning constraint.  Multiple inheritance is not
allowed, and partitioning and inheritance can't be mixed.  Partitions
can't have extra columns and may not allow nulls unless the parent
does.  Tuples inserted into the parent are automatically routed to the
correct partition, so tuple-routing ON INSERT triggers are not needed.
Tuple routing isn't yet supported for partitions which are foreign
tables, and it doesn't handle updates that cross partition boundaries.

Currently, tables can be range-partitioned or list-partitioned.  List
partitioning is limited to a single column, but range partitioning can
involve multiple columns.  A partitioning "column" can be an
expression.

Because table partitioning is less general than table inheritance, it
is hoped that it will be easier to reason about properties of
partitions, and therefore that this will serve as a better foundation
for a variety of possible optimizations, including query planner
optimizations.  The tuple routing based which this patch does based on
the implicit partitioning constraints is an example of this, but it
seems likely that many other useful optimizations are also possible.

Amit Langote, reviewed and tested by Robert Haas, Ashutosh Bapat,
Amit Kapila, Rajkumar Raghuwanshi, Corey Huinker, Jaime Casanova,
Rushabh Lathia, Erik Rijkers, among others.  Minor revisions by me.
2016-12-07 13:17:55 -05:00
..
editors emacs: Set indent-tabs-mode in perl-mode 2015-04-12 23:53:23 -04:00
entab pgindent run for 9.4 2014-05-06 12:12:18 -04:00
findoidjoins Update oidjoins regression test for 9.6. 2016-06-22 17:12:55 -04:00
ifaddrs Move code shared between libpq and backend from backend/libpq/ to common/. 2016-09-02 13:49:59 +03:00
make_diff Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
msvc Replace PostmasterRandom() with a stronger source, second attempt. 2016-12-05 13:42:59 +02:00
pginclude cpluspluscheck: Update include path 2016-04-11 11:16:16 -04:00
pgindent Implement table partitioning. 2016-12-07 13:17:55 -05:00
ccsym tools/ccsym: update for modern versions of gcc 2015-01-20 13:02:58 -05:00
check_bison_recursion.pl Update copyright for 2016 2016-01-02 13:33:40 -05:00
codelines Fix remaining stray references to CVS. 2010-09-22 19:51:39 -04:00
copyright.pl Finish pgindent run for 9.6: Perl files. 2016-06-12 04:19:56 -04:00
FAQ2txt Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
find_badmacros Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
find_static Fix omission of -X (--no-psqlrc) in some psql invocations. 2015-12-28 11:46:43 -05:00
find_typedef Refer to OS X as "macOS", except for the port name which is still "darwin". 2016-09-25 15:40:57 -04:00
git_changelog Update git_changelog to know that there's a 9.6 branch. 2016-08-15 15:24:54 -04:00
git-external-diff Add comment to tools/git-external-diff. 2011-03-11 05:06:31 -05:00
make_ctags Mention original ctags option name. 2012-02-24 16:19:18 -05:00
make_etags Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
make_mkid Add another pgdefine path check, and a cvs-git change. 2011-08-26 21:52:35 -04:00
pgtest pgtest: allow passing parameters, e.g. -s/--silent 2013-08-05 19:59:52 -04:00
RELEASE_CHANGES Remove vestigial references to "zic" in favor of "IANA database". 2016-09-04 19:42:08 -04:00
valgrind.supp Copyedit comments and documentation. 2016-04-01 21:53:10 -04:00
version_stamp.pl Stamp HEAD as 10devel. 2016-08-15 13:49:49 -04:00
win32tzlist.pl Update copyright for 2016 2016-01-02 13:33:40 -05:00