Opened 2 days ago

Last modified 31 hours ago

#36592 closed New feature

Incorrect warning when specifying a UniqueConstraint with SQLite and nulls_distinct=False — at Version 2

Reported by: Russell Owen Owned by:
Component: Database layer (models, ORM) Version: 5.2
Severity: Normal Keywords: SQLite UniqueConstraint
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Russell Owen)

I am trying to create a UniqueConstraint with nulls_distinct=False. This will be used with sqlite for local use and tests, and postgresql for production.

When I migrate my sqlite database I get this warning:

SQLite does not support unique constraints with nulls distinct.

I suspect this is a bug, since I specified that nulls should not be distinct.

Note that I also get the same warning if I specify nulls_distinct=True, but in that case I expect to see it.

Here is the simplest model I could come up with that shows the issue:

class SimpleModel(models.Model):
    field_a = models.IntegerField(null=True)
    field_b = models.IntegerField(null=True)

    class Meta:
        constraints = [
            UniqueConstraint(
                name="simple_unique_constraint",
                fields=["field_a", "field_b"],
                nulls_distinct=False,
            ),
        ]

The full warning I see on migration is:

WARNINGS:
dances.SimpleModel: (models.W047) SQLite does not support unique constraints with nulls distinct.
	HINT: A constraint won't be created. Silence this warning if you don't care about it.

and, as I said before, I get the same warning if I use nulls_distinct=True (which is when I expect to see the warning).

Change History (2)

comment:1 by Russell Owen, 2 days ago

Summary: Incorrect warning when specifying a UniqueConstraint with SQLite and nulls_distinct=TrueIncorrect warning when specifying a UniqueConstraint with SQLite and nulls_distinct=False

comment:2 by Russell Owen, 2 days ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top