﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29182	SQLite 3.26 breaks database migration ForeignKey constraint, leaving <table_name>__old in db schema	ezaquarii	nobody	"SQLite table alteration uses rename and copy method. When running a database migration from Django command (via `call_command('migrate')`), database is left with references to `<table_name>__old` table that has been dropped after migration.

This happens only when running SQLite DB migrations from management command under transaction.
Running migrations via `./manage.py migrate` does not cause any issues.

This is the demonstration:
https://github.com/ezaquarii/django-sqlite-migration-bug

Steps to reproduce the bug
1. run ./bootstrap.sh
2. from import app.models import *
3. Bravo.objects.create()
4. SQL cannot be executed due to missing table `main.app_alpha__old`

    - `app/management/commands/bootstrap.py:9`: run the migration
    - `alpha` table is created
    - `bravo` table is created; it uses foreign key to `alpha`
    -  another `alpha` migration is run, adding dummy field
    - `alpha` table is renamed to `alpha__old`
    - `bravo` foreign key is re-linked to `alpha__old`
    - new table `alpha` is created and data from `alpha__old` is copied with applied alterations
    - `alpha__old` is dropped
    - `bravo` still references `alpha__old` - ForeignKey constraint is **not** updated and DB is left in unusable state


{{{
CREATE TABLE ""app_bravo"" (""id"" integer NOT NULL PRIMARY KEY AUTOINCREMENT, ""dummy"" varchar(10) NOT NULL, ""alpha_id"" integer NOT NULL REFERENCES ""app_alpha__old"" (""id"") DEFERRABLE INITIALLY DEFERRED);
}}}

Tested with Django versions: 2.0.1 and 2.0.2"	Bug	closed	Migrations	2.0	Release blocker	fixed	sqlite migration	Simon Charette Florian Apolloner Adam Goode Muflone	Accepted	1	0	0	0	0	0
