#28849 closed Bug (fixed)
SQLite foreign key constraints are not repointed on model or field rename
Reported by: | Simon Charette | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 2.0 |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
SQLite foreign key constraints are not automatically repointed on table or column renames which is going to cause a issues to projects who previously renamed a model or a column referenced by another model when they migrate to Django 2.0 which start enforcing them.
e.g. of a SQLite3 session
SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite> CREATE TABLE foo ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT); sqlite> CREATE TABLE bar ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "foo_id" integer NOT NULL REFERENCES "foo" ("id") DEFERRABLE INITIALLY DEFERRED); sqlite> ALTER TABLE foo RENAME TO renamed; sqlite> .schema bar CREATE TABLE bar ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "foo_id" integer NOT NULL REFERENCES "foo" ("id") DEFERRABLE INITIALLY DEFERRED); -- It still points to "foo" sqlite> INSERT INTO bar (foo_id) VALUES (999); sqlite> PRAGMA foreign_keys = ON; -- From Django 2.0+ sqlite> INSERT INTO bar (foo_id) VALUES (999); Error: no such table: main.foo
Since we're already documenting that users should remake their tables it should alleviate the issue but we should also sure to:
- Document that tables that have been previously renamed (or had a column referenced by a
ForeignKey(to_field)
renamed) must be rebuilt. - Adjust SQLite's schema editor to remake tables referencing a renamed table or one that is remade to simulate a column rename to prevent this from happening from now on.
This was discovered while working on fixing #25817.
Change History (4)
comment:1 by , 7 years ago
Description: | modified (diff) |
---|---|
Has patch: | set |
Patch needs improvement: | set |
comment:2 by , 7 years ago
Needs documentation: | unset |
---|---|
Patch needs improvement: | unset |
Triage Stage: | Accepted → Ready for checkin |
Note:
See TracTickets
for help on using tickets.
Submitted a PR with a regression test for the table rename case.