#34881: Model-rename migration fails with IntegrityError if m2m relations to 
self
exist
----------------------------+--------------------------------------
     Reporter:  dennisvang  |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  dev
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Unreviewed
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+--------------------------------------
Changes (by Natalia Bidart):

 * cc: Simon Charette, Mariusz Felisiak (added)
 * version:  4.2 => dev
 * component:  Uncategorized => Migrations


Comment:

 Assuming a simpler model for `Person` where the M2M is implicit, and doing
 the rename, does indeed work. The SQL for the migration is:
 * 0003 (renamed `SimplerPerson` to `SimplerPersonFoo`)
 {{{#!sql

 BEGIN;
 --
 -- Rename model SimplerPerson to SimplerPersonFoo
 --
 ALTER TABLE "ticket_34881_simplerperson" RENAME TO
 "ticket_34881_simplerpersonfoo";
 CREATE TABLE "ticket_34881_simplerpersonfoo_parents_or_children" ("id"
 integer NOT NULL PRIMARY KEY AUTOINCREMENT, "from_simplerpersonfoo_id"
 bigint NOT NULL REFERENCES "ticket_34881_simplerpersonfoo" ("id")
 DEFERRABLE INITIALLY DEFERRED, "to_simplerpersonfoo_id" bigint NOT NULL
 REFERENCES "ticket_34881_simplerpersonfoo" ("id") DEFERRABLE INITIALLY
 DEFERRED);
 INSERT INTO "ticket_34881_simplerpersonfoo_parents_or_children" (id,
 from_simplerpersonfoo_id, to_simplerpersonfoo_id) SELECT id,
 from_simplerperson_id, to_simplerperson_id FROM
 "ticket_34881_simplerperson_parents_or_children";
 DROP TABLE "ticket_34881_simplerperson_parents_or_children";
 CREATE UNIQUE INDEX
 
"ticket_34881_simplerpersonfoo_parents_or_children_from_simplerpersonfoo_id_to_simplerpersonfoo_id_f05f0b12_uniq"
 ON "ticket_34881_simplerpersonfoo_parents_or_children"
 ("from_simplerpersonfoo_id", "to_simplerpersonfoo_id");
 CREATE INDEX
 
"ticket_34881_simplerpersonfoo_parents_or_children_from_simplerpersonfoo_id_6d3cdfb4"
 ON "ticket_34881_simplerpersonfoo_parents_or_children"
 ("from_simplerpersonfoo_id");
 CREATE INDEX
 
"ticket_34881_simplerpersonfoo_parents_or_children_to_simplerpersonfoo_id_83aff647"
 ON "ticket_34881_simplerpersonfoo_parents_or_children"
 ("to_simplerpersonfoo_id");
 COMMIT;
 }}}

 It's worth noting that the content of the explicit M2M (`Relation`) has
 these rows:
 {{{
 sqlite> SELECT * FROM ticket_34881_relation;
 1|1|3
 2|2|3
 3|1|4
 4|2|4
 }}}

 While the rows for the implicit one include:
 {{{
 sqlite> SELECT * FROM ticket_34881_simplerperson_parents_or_children;
 1|3|1
 2|3|2
 3|1|3
 4|2|3
 5|4|1
 6|4|2
 7|1|4
 8|2|4
 }}}


 It may look like a valid issue but I'll cc Simon and Mariusz for a second
 opinion.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34881#comment:10>
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 on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018add9c9fd8-1dbf6de4-1e6a-425e-b700-c19bdb34bccd-000000%40eu-central-1.amazonses.com.

Reply via email to