Support deferrable uniqueness constraints.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 25d9bf2e3e66ee2e546c5c523d148ecab6ee1dcc
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2009-07-29T20:56:21Z
Releases: 9.0.0
Support deferrable uniqueness constraints.

The current implementation fires an AFTER ROW trigger for each tuple that
looks like it might be non-unique according to the index contents at the
time of insertion.  This works well as long as there aren't many conflicts,
but won't scale to massive unique-key reassignments.  Improving that case
is a TODO item.

Dean Rasheed

Files

PathChange+/−
doc/src/sgml/catalogs.sgml modified +9 −1
doc/src/sgml/indexam.sgml modified +95 −13
doc/src/sgml/ref/create_table.sgml modified +29 −11
doc/src/sgml/ref/set_constraints.sgml modified +16 −7
src/backend/access/gin/gininsert.c modified +5 −6
src/backend/access/gist/gist.c modified +3 −3
src/backend/access/hash/hash.c modified +3 −3
src/backend/access/heap/tuptoaster.c modified +4 −2
src/backend/access/index/indexam.c modified +3 −3
src/backend/access/nbtree/nbtinsert.c modified +97 −16
src/backend/access/nbtree/nbtree.c modified +5 −4
src/backend/bootstrap/bootparse.y modified +3 −3
src/backend/catalog/index.c modified +64 −5
src/backend/catalog/indexing.c modified +3 −2
src/backend/catalog/sql_features.txt modified +1 −1
src/backend/catalog/toasting.c modified +3 −2
src/backend/commands/constraint.c added +166 −0
src/backend/commands/copy.c modified +7 −3
src/backend/commands/indexcmds.c modified +9 −3
src/backend/commands/Makefile modified +2 −2
src/backend/commands/tablecmds.c modified +24 −7
src/backend/commands/trigger.c modified +42 −22
src/backend/executor/execMain.c modified +10 −5
src/backend/executor/execUtils.c modified +49 −13
src/backend/nodes/copyfuncs.c modified +5 −1
src/backend/nodes/equalfuncs.c modified +5 −1
src/backend/nodes/outfuncs.c modified +7 −1
src/backend/parser/gram.y modified +27 −2
src/backend/parser/parse_utilcmd.c modified +103 −34
src/backend/tcop/utility.c modified +4 −2
src/backend/utils/adt/ruleutils.c modified +6 −6
src/backend/utils/cache/relcache.c modified +2 −2
src/bin/pg_dump/pg_dump.c modified +27 −1
src/bin/pg_dump/pg_dump.h modified +6 −1
src/bin/psql/describe.c modified +65 −10
src/include/access/genam.h modified +30 −2
src/include/access/nbtree.h modified +3 −3
src/include/catalog/catversion.h modified +2 −2
src/include/catalog/index.h modified +3 −1
src/include/catalog/pg_attribute.h modified +11 −10
src/include/catalog/pg_index.h modified +13 −11
src/include/catalog/pg_proc.h modified +5 −1
src/include/commands/defrem.h modified +3 −1
src/include/commands/trigger.h modified +6 −4
src/include/executor/executor.h modified +3 −3
src/include/nodes/parsenodes.h modified +9 −6
src/include/utils/builtins.h modified +4 −1
src/test/regress/expected/sanity_check.out modified +2 −1
src/test/regress/input/constraints.source modified +107 −0
src/test/regress/output/constraints.source modified +129 −0
src/test/regress/sql/sanity_check.sql modified +2 −1