pgsql: Support deferrable uniqueness constraints. - Mailing list pgsql-committers

From tgl@postgresql.org (Tom Lane)
Subject pgsql: Support deferrable uniqueness constraints.
Date
Msg-id 20090729205621.78BB475331E@cvs.postgresql.org
Whole thread Raw
List 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)

pgsql-committers by date:

Previous
From: tgl@postgresql.org (Tom Lane)
Date:
Subject: pgsql: Fix a thinko introduced into CountActiveBackends by a recent
Next
From: decibel@pgfoundry.org (User Decibel)
Date:
Subject: deny-updates - trunk: Switch to using temp table in deny test to make it