diff options
author | Simon Charette <charette.s@gmail.com> | 2018-12-06 11:37:43 -0500 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-12-07 14:22:27 -0500 |
commit | fc8c2284e9f9e8d5d17ef35f282917a6833fafed (patch) | |
tree | 95d599385f1c121516b301d2c40ec1196545e04a | |
parent | 4c506730b5a8dae2ab9a16712db2f39c21d4385a (diff) | |
download | django-fc8c2284e9f9e8d5d17ef35f282917a6833fafed.tar.gz |
[2.1.x] Fixed #29182 -- Fixed schema table alteration on SQLite 3.26+.
SQLite 3.26 repoints foreign key constraints on table renames even when
foreign_keys pragma is off which breaks every operation that requires
a table rebuild to simulate unsupported ALTER TABLE statements.
The newly introduced legacy_alter_table pragma disables this behavior
and restores the previous schema editor assumptions.
Thanks Florian Apolloner, Christoph Trassl, Chris Lamb for the report and
troubleshooting assistance.
Backport of c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f from master.
-rw-r--r-- | django/db/backends/sqlite3/schema.py | 2 | ||||
-rw-r--r-- | docs/releases/2.0.10.txt | 4 | ||||
-rw-r--r-- | docs/releases/2.1.5.txt | 4 |
3 files changed, 10 insertions, 0 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py index b27d39d732..e0d8135cbd 100644 --- a/django/db/backends/sqlite3/schema.py +++ b/django/db/backends/sqlite3/schema.py @@ -21,10 +21,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): # Some SQLite schema alterations need foreign key constraints to be # disabled. Enforce it here for the duration of the transaction. self.connection.disable_constraint_checking() + self.connection.cursor().execute('PRAGMA legacy_alter_table = ON') return super().__enter__() def __exit__(self, exc_type, exc_value, traceback): super().__exit__(exc_type, exc_value, traceback) + self.connection.cursor().execute('PRAGMA legacy_alter_table = OFF') self.connection.enable_constraint_checking() def quote_value(self, value): diff --git a/docs/releases/2.0.10.txt b/docs/releases/2.0.10.txt index fd2e7f5ebf..ece2521867 100644 --- a/docs/releases/2.0.10.txt +++ b/docs/releases/2.0.10.txt @@ -12,3 +12,7 @@ Bugfixes * Prevented repetitive calls to ``geos_version_tuple()`` in the ``WKBWriter`` class in an attempt to fix a random crash involving ``LooseVersion`` since Django 2.0.6 (:ticket:`29959`). + +* Fixed a schema corruption issue on SQLite 3.26+. You might have to drop and + rebuild your SQLite database if you applied a migration while using an older + version of Django with SQLite 3.26 or later (:ticket:`29182`). diff --git a/docs/releases/2.1.5.txt b/docs/releases/2.1.5.txt index 25ec9fb804..9f1f3a4e8a 100644 --- a/docs/releases/2.1.5.txt +++ b/docs/releases/2.1.5.txt @@ -11,3 +11,7 @@ Bugfixes ======== * Fixed compatibility with mysqlclient 1.3.14 (:ticket:`30013`). + +* Fixed a schema corruption issue on SQLite 3.26+. You might have to drop and + rebuild your SQLite database if you applied a migration while using an older + version of Django with SQLite 3.26 or later (:ticket:`29182`). |