#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.