Opened 11 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 , 11 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|---|
| Version: | master → 1.7 |
comment:2 by , 11 years ago
See the comments of #24067 for a proposed solution that would allow addressing this.
comment:3 by , 11 years ago
comment:4 by , 11 years ago
| Has patch: | set |
|---|---|
| Needs tests: | set |
I created an initial PR that tackles the problem until #24100 is fixed.
comment:5 by , 11 years ago
| Needs tests: | unset |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
comment:6 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
comment:10 by , 11 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 , 11 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.