Opened 10 years ago
Closed 9 years ago
#24075 closed Bug (fixed)
Can't migrate contenttypes and auth to zero
Reported by: | Florian Apolloner | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Florian Apolloner, Markus Holtermann | 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
Trying to migrate either auth to zero results in:
./manage.py migrate -v3 auth zero Operations to perform: Unapply all migrations: auth Running pre-migrate handlers for application admin Running pre-migrate handlers for application auth Running pre-migrate handlers for application contenttypes Running pre-migrate handlers for application sessions Running migrations: Unapplying auth.0005_alter_user_last_login_null... OK (0.023s) Unapplying auth.0004_alter_user_username_opts... OK (0.013s) Unapplying auth.0003_alter_user_email_max_length... OK (0.015s) Unapplying auth.0002_alter_permission_name_max_length... OK (0.008s) Unapplying admin.0001_initial... OK (0.014s) Unapplying auth.0001_initial... OK (0.035s) Running post-migrate handlers for application admin Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/florian/sources/django.git/django/core/management/__init__.py", line 338, in execute_from_command_line utility.execute() File "/home/florian/sources/django.git/django/core/management/__init__.py", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/florian/sources/django.git/django/core/management/base.py", line 391, in run_from_argv self.execute(*args, **cmd_options) File "/home/florian/sources/django.git/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/florian/sources/django.git/django/core/management/commands/migrate.py", line 216, in handle emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias) File "/home/florian/sources/django.git/django/core/management/sql.py", line 280, in emit_post_migrate_signal using=db) File "/home/florian/sources/django.git/django/dispatch/dispatcher.py", line 198, in send response = receiver(signal=self, sender=sender, **named) File "/home/florian/sources/django.git/django/contrib/auth/management/__init__.py", line 93, in create_permissions "content_type", "codename" File "/home/florian/sources/django.git/django/db/models/query.py", line 164, in __iter__ self._fetch_all() File "/home/florian/sources/django.git/django/db/models/query.py", line 999, in _fetch_all self._result_cache = list(self.iterator()) File "/home/florian/sources/django.git/django/db/models/query.py", line 1254, in iterator for row in self.query.get_compiler(self.db).results_iter(): File "/home/florian/sources/django.git/django/db/models/sql/compiler.py", line 747, in results_iter for rows in self.execute_sql(MULTI): File "/home/florian/sources/django.git/django/db/models/sql/compiler.py", line 831, in execute_sql cursor.execute(sql, params) File "/home/florian/sources/django.git/django/db/backends/utils.py", line 80, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/home/florian/sources/django.git/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) File "/home/florian/sources/django.git/django/db/utils.py", line 95, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/florian/sources/django.git/django/db/backends/utils.py", line 65, in execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "auth_permission" does not exist LINE 1: ...ntent_type_id", "auth_permission"."codename" FROM "auth_perm...
and migrating contenttypes to zero:
./manage.py migrate -v3 contenttypes zero Operations to perform: Unapply all migrations: contenttypes Running pre-migrate handlers for application admin Running pre-migrate handlers for application auth Running pre-migrate handlers for application contenttypes Running pre-migrate handlers for application sessions Running migrations: Unapplying contenttypes.0001_initial... OK (0.029s) Running post-migrate handlers for application admin Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/florian/sources/django.git/django/core/management/__init__.py", line 338, in execute_from_command_line utility.execute() File "/home/florian/sources/django.git/django/core/management/__init__.py", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/florian/sources/django.git/django/core/management/base.py", line 391, in run_from_argv self.execute(*args, **cmd_options) File "/home/florian/sources/django.git/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/home/florian/sources/django.git/django/core/management/commands/migrate.py", line 216, in handle emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias) File "/home/florian/sources/django.git/django/core/management/sql.py", line 280, in emit_post_migrate_signal using=db) File "/home/florian/sources/django.git/django/dispatch/dispatcher.py", line 198, in send response = receiver(signal=self, sender=sender, **named) File "/home/florian/sources/django.git/django/contrib/auth/management/__init__.py", line 82, in create_permissions ctype = ContentType.objects.db_manager(using).get_for_model(klass) File "/home/florian/sources/django.git/django/contrib/contenttypes/models.py", line 60, in get_for_model "Error creating new content types. Please make sure contenttypes " RuntimeError: Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually.
Not really sure how to best fix this, should the signal handlers check the migration table?
Change History (22)
comment:1 by , 10 years ago
Triage Stage: | Unreviewed → Accepted |
---|---|
Version: | master → 1.7 |
comment:2 by , 10 years ago
See the comments of #24067 for a proposed solution that would allow addressing this.
comment:3 by , 10 years ago
comment:4 by , 10 years ago
Has patch: | set |
---|---|
Needs tests: | set |
I created an initial PR that tackles the problem until #24100 is fixed.
comment:5 by , 10 years ago
Needs tests: | unset |
---|---|
Triage Stage: | Accepted → Ready for checkin |
comment:6 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:10 by , 10 years ago
I'm reverting these patches (https://github.com/django/django/pull/4079) as they cause more harm (severe impact on test performance (#24251) and problems in multi-database setups (#24298)) than good. The described error most likely only occurs on development systems where dropping the respective tables or the entire database shouldn't be a problem.
This issue can be fixed with #24100 instead.
comment:17 by , 10 years ago
Cc: | added |
---|---|
Has patch: | unset |
Resolution: | fixed |
Severity: | Release blocker → Normal |
Status: | closed → new |
Triage Stage: | Ready for checkin → Accepted |
comment:18 by , 9 years ago
Has patch: | set |
---|---|
Needs tests: | set |
Patch needs improvement: | set |
Version: | 1.7 → master |
I have a mostly working PR that is still missing tests and requires some MigrationExecutor.migration_plan()
tweaking that I'll try to figure out with the help of Markus.
comment:19 by , 9 years ago
Needs tests: | unset |
---|---|
Patch needs improvement: | unset |
The proposed patch now allows the auth
, contenttypes
and sites
application to be migrated to any migration (zero included).
I'm still trying to figure out how to test these changes as the test suite disables migrations for the auth
and contenttypes
application (using MIGRATION_MODULES['app'] = None
).
comment:20 by , 9 years ago
I managed to add tests for the auth
, contenttypes
and sites
applications. This should be ready for a final review.
comment:21 by , 9 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
If it's feasible, an easy way to introspect whether a model's table exists seems useful (not sure if that solution could be backported to 1.7 though).
#22411 is where that error message was added, so maybe that fix could be modified as well if we can do better.