pgsql: Support deferrable uniqueness constraints.

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Support deferrable uniqueness constraints.
Date: 2009-07-29 20:56:21
Message-ID: 20090729205621.78BB475331E@cvs.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
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

Modified Files:
--------------
pgsql/doc/src/sgml:
catalogs.sgml (r2.202 -> r2.203)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/catalogs.sgml?r1=2.202&r2=2.203)
indexam.sgml (r2.30 -> r2.31)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/indexam.sgml?r1=2.30&r2=2.31)
pgsql/doc/src/sgml/ref:
create_table.sgml (r1.114 -> r1.115)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/create_table.sgml?r1=1.114&r2=1.115)
set_constraints.sgml (r1.16 -> r1.17)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/set_constraints.sgml?r1=1.16&r2=1.17)
pgsql/src/backend/access/gin:
gininsert.c (r1.22 -> r1.23)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/gininsert.c?r1=1.22&r2=1.23)
pgsql/src/backend/access/gist:
gist.c (r1.156 -> r1.157)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gist/gist.c?r1=1.156&r2=1.157)
pgsql/src/backend/access/hash:
hash.c (r1.112 -> r1.113)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/hash/hash.c?r1=1.112&r2=1.113)
pgsql/src/backend/access/heap:
tuptoaster.c (r1.94 -> r1.95)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/tuptoaster.c?r1=1.94&r2=1.95)
pgsql/src/backend/access/index:
indexam.c (r1.114 -> r1.115)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/index/indexam.c?r1=1.114&r2=1.115)
pgsql/src/backend/access/nbtree:
nbtinsert.c (r1.170 -> r1.171)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtinsert.c?r1=1.170&r2=1.171)
nbtree.c (r1.171 -> r1.172)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtree.c?r1=1.171&r2=1.172)
pgsql/src/backend/bootstrap:
bootparse.y (r1.96 -> r1.97)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/bootstrap/bootparse.y?r1=1.96&r2=1.97)
pgsql/src/backend/catalog:
index.c (r1.319 -> r1.320)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/index.c?r1=1.319&r2=1.320)
indexing.c (r1.117 -> r1.118)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/indexing.c?r1=1.117&r2=1.118)
sql_features.txt (r1.39 -> r1.40)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/sql_features.txt?r1=1.39&r2=1.40)
toasting.c (r1.17 -> r1.18)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/toasting.c?r1=1.17&r2=1.18)
pgsql/src/backend/commands:
Makefile (r1.39 -> r1.40)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/Makefile?r1=1.39&r2=1.40)
copy.c (r1.315 -> r1.316)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/copy.c?r1=1.315&r2=1.316)
indexcmds.c (r1.186 -> r1.187)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/indexcmds.c?r1=1.186&r2=1.187)
tablecmds.c (r1.292 -> r1.293)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablecmds.c?r1=1.292&r2=1.293)
trigger.c (r1.249 -> r1.250)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/trigger.c?r1=1.249&r2=1.250)
pgsql/src/backend/executor:
execMain.c (r1.326 -> r1.327)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execMain.c?r1=1.326&r2=1.327)
execUtils.c (r1.160 -> r1.161)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execUtils.c?r1=1.160&r2=1.161)
pgsql/src/backend/nodes:
copyfuncs.c (r1.435 -> r1.436)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c?r1=1.435&r2=1.436)
equalfuncs.c (r1.358 -> r1.359)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c?r1=1.358&r2=1.359)
outfuncs.c (r1.361 -> r1.362)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/outfuncs.c?r1=1.361&r2=1.362)
pgsql/src/backend/parser:
gram.y (r2.673 -> r2.674)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/gram.y?r1=2.673&r2=2.674)
parse_utilcmd.c (r2.23 -> r2.24)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/parse_utilcmd.c?r1=2.23&r2=2.24)
pgsql/src/backend/tcop:
utility.c (r1.312 -> r1.313)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/utility.c?r1=1.312&r2=1.313)
pgsql/src/backend/utils/adt:
ruleutils.c (r1.304 -> r1.305)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/ruleutils.c?r1=1.304&r2=1.305)
pgsql/src/backend/utils/cache:
relcache.c (r1.287 -> r1.288)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/relcache.c?r1=1.287&r2=1.288)
pgsql/src/bin/pg_dump:
pg_dump.c (r1.542 -> r1.543)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_dump/pg_dump.c?r1=1.542&r2=1.543)
pg_dump.h (r1.154 -> r1.155)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_dump/pg_dump.h?r1=1.154&r2=1.155)
pgsql/src/bin/psql:
describe.c (r1.225 -> r1.226)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/bin/psql/describe.c?r1=1.225&r2=1.226)
pgsql/src/include/access:
genam.h (r1.78 -> r1.79)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/genam.h?r1=1.78&r2=1.79)
nbtree.h (r1.124 -> r1.125)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/nbtree.h?r1=1.124&r2=1.125)
pgsql/src/include/catalog:
catversion.h (r1.533 -> r1.534)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/catversion.h?r1=1.533&r2=1.534)
index.h (r1.77 -> r1.78)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/index.h?r1=1.77&r2=1.78)
pg_attribute.h (r1.148 -> r1.149)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_attribute.h?r1=1.148&r2=1.149)
pg_index.h (r1.47 -> r1.48)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_index.h?r1=1.47&r2=1.48)
pg_proc.h (r1.546 -> r1.547)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_proc.h?r1=1.546&r2=1.547)
pgsql/src/include/commands:
defrem.h (r1.95 -> r1.96)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/defrem.h?r1=1.95&r2=1.96)
trigger.h (r1.74 -> r1.75)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/trigger.h?r1=1.74&r2=1.75)
pgsql/src/include/executor:
executor.h (r1.157 -> r1.158)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/executor/executor.h?r1=1.157&r2=1.158)
pgsql/src/include/nodes:
parsenodes.h (r1.398 -> r1.399)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/parsenodes.h?r1=1.398&r2=1.399)
pgsql/src/include/utils:
builtins.h (r1.334 -> r1.335)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/builtins.h?r1=1.334&r2=1.335)
pgsql/src/test/regress/expected:
sanity_check.out (r1.39 -> r1.40)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/sanity_check.out?r1=1.39&r2=1.40)
pgsql/src/test/regress/input:
constraints.source (r1.12 -> r1.13)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/input/constraints.source?r1=1.12&r2=1.13)
pgsql/src/test/regress/output:
constraints.source (r1.43 -> r1.44)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/output/constraints.source?r1=1.43&r2=1.44)
pgsql/src/test/regress/sql:
sanity_check.sql (r1.6 -> r1.7)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/sanity_check.sql?r1=1.6&r2=1.7)

Added Files:
-----------
pgsql/src/backend/commands:
constraint.c (r1.1)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/constraint.c?rev=1.1&content-type=text/x-cvsweb-markup)

Browse pgsql-committers by date

  From Date Subject
Next Message User Decibel 2009-07-29 21:47:39 deny-updates - trunk: Switch to using temp table in deny test to make it
Previous Message Tom Lane 2009-07-29 15:57:39 pgsql: Fix a thinko introduced into CountActiveBackends by a recent