TABLESAMPLE, SQL Standard and extensible

Simon Riggs <simon@2ndQuadrant.com>

Commit: f6d208d6e51810c73f0e02c477984a6b44627f11
Author: Simon Riggs <simon@2ndQuadrant.com>
Date: 2015-05-15T18:37:10Z
Releases: 9.5.0
TABLESAMPLE, SQL Standard and extensible

Add a TABLESAMPLE clause to SELECT statements that allows
user to specify random BERNOULLI sampling or block level
SYSTEM sampling. Implementation allows for extensible
sampling functions to be written, using a standard API.
Basic version follows SQLStandard exactly. Usable
concrete use cases for the sampling API follow in later
commits.

Petr Jelinek

Reviewed by Michael Paquier and Simon Riggs

Files

PathChange+/−
contrib/file_fdw/file_fdw.c modified +1 −1
contrib/postgres_fdw/postgres_fdw.c modified +1 −1
doc/src/sgml/catalogs.sgml modified +120 −0
doc/src/sgml/ref/select.sgml modified +60 −1
src/backend/access/heap/heapam.c modified +29 −12
src/backend/access/Makefile modified +2 −1
src/backend/access/tablesample/bernoulli.c added +235 −0
src/backend/access/tablesample/Makefile added +17 −0
src/backend/access/tablesample/system.c added +186 −0
src/backend/access/tablesample/tablesample.c added +368 −0
src/backend/catalog/Makefile modified +2 −3
src/backend/commands/analyze.c modified +1 −1
src/backend/commands/explain.c modified +21 −0
src/backend/executor/execAmi.c modified +8 −0
src/backend/executor/execCurrent.c modified +1 −0
src/backend/executor/execProcnode.c modified +14 −0
src/backend/executor/Makefile modified +1 −1
src/backend/executor/nodeSamplescan.c added +256 −0
src/backend/nodes/copyfuncs.c modified +60 −0
src/backend/nodes/equalfuncs.c modified +37 −0
src/backend/nodes/nodeFuncs.c modified +28 −0
src/backend/nodes/outfuncs.c modified +48 −0
src/backend/nodes/readfuncs.c modified +45 −0
src/backend/optimizer/path/allpaths.c modified +49 −0
src/backend/optimizer/path/costsize.c modified +67 −0
src/backend/optimizer/plan/createplan.c modified +69 −0
src/backend/optimizer/plan/planner.c modified +14 −1
src/backend/optimizer/plan/setrefs.c modified +11 −0
src/backend/optimizer/plan/subselect.c modified +1 −0
src/backend/optimizer/util/pathnode.c modified +22 −0
src/backend/parser/gram.y modified +34 −2
src/backend/parser/parse_clause.c modified +56 −0
src/backend/parser/parse_func.c modified +143 −0
src/backend/rewrite/rewriteHandler.c modified +3 −0
src/backend/utils/adt/ruleutils.c modified +50 −0
src/backend/utils/cache/lsyscache.c modified +27 −0
src/backend/utils/cache/syscache.c modified +23 −0
src/backend/utils/misc/sampling.c modified +24 −9
src/include/access/heapam.h modified +4 −0
src/include/access/relscan.h modified +1 −0
src/include/access/tablesample.h added +60 −0
src/include/catalog/indexing.h modified +5 −0
src/include/catalog/pg_proc.h modified +27 −0
src/include/catalog/pg_tablesample_method.h added +78 −0
src/include/executor/nodeSamplescan.h added +24 −0
src/include/nodes/execnodes.h modified +9 −0
src/include/nodes/nodes.h modified +4 −0
src/include/nodes/parsenodes.h modified +37 −0
src/include/nodes/plannodes.h modified +6 −0
src/include/optimizer/cost.h modified +1 −0
src/include/optimizer/pathnode.h modified +2 −0
src/include/parser/kwlist.h modified +1 −0
src/include/parser/parse_func.h modified +5 −0
src/include/port.h modified +4 −0
src/include/utils/lsyscache.h modified +1 −0
src/include/utils/rel.h modified +0 −1
src/include/utils/sampling.h modified +13 −2
src/include/utils/syscache.h modified +2 −0
src/port/erand48.c modified +0 −3
src/test/regress/expected/rowsecurity.out modified +26 −0
src/test/regress/expected/sanity_check.out modified +1 −0
src/test/regress/expected/tablesample.out added +231 −0
src/test/regress/parallel_schedule modified +1 −1
src/test/regress/serial_schedule modified +1 −0
src/test/regress/sql/rowsecurity.sql modified +4 −0
src/test/regress/sql/tablesample.sql added +74 −0