#37069: Document that UniqueConstraint may create unique indexes unassociated 
with
actual database constraints
-------------------------------------+-------------------------------------
               Reporter:  Clifford   |          Owner:  Clifford Gama
  Gama                               |
                   Type:             |         Status:  assigned
  Cleanup/optimization               |
              Component:             |        Version:  dev
  Documentation                      |
               Severity:  Normal     |       Keywords:  unique
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 The
 [https://docs.djangoproject.com/en/dev/ref/models/constraints/#uniqueconstraint
 docs] for `UniqueConstraint`:

 > Creates a unique constraint in the database.

 This is not always true. Depending on the options used, `UniqueConstraint`
 may instead create a unique index via `CREATE UNIQUE INDEX` rather than a
 database constraint via `ALTER TABLE ... ADD CONSTRAINT ... UNIQUE`
 
([https://github.com/django/django/blob/e84dc8715e91d51364ba6bda2b2fb07e7a8b750e/django/db/backends/base/schema.py#L1913-L1916
 source]).

 For example, adding the following constraints to a model with a `name`
 field:
 {{{#!python
 constraints = [
     models.UniqueConstraint(models.F("name"), name="unique_name_exp"),
     models.UniqueConstraint(fields=["name"], name="unique_name_field"),
 ]
 }}}
 produces the following SQL on PostgreSQL:
 {{{#!sql
 BEGIN;
 -- Create constraint unique_name_exp on model mymodel
 CREATE UNIQUE INDEX "unique_name_exp" ON "upref_mymodel" ("name");
 -- Create constraint unique_name_field on model mymodel
 ALTER TABLE "myapp_mymodel" ADD CONSTRAINT "unique_name_field" UNIQUE
 ("name");
 COMMIT;
 }}}

 See also [https://github.com/django/new-features/issues/124 Allow unique
 indexes (via UniqueConstraint) to be created/dropped CONCURRENTLY on
 PostgreSQL] where this came up as something of an issue.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/37069>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/0107019dc9aaf6ba-7f03a3f1-8e4d-487d-a2b9-f2ea2b3a60b8-000000%40eu-central-1.amazonses.com.

Reply via email to