Opened 19 months ago
Last modified 19 months ago
#34510 closed Uncategorized
sqlmigrate does not follows replaces in squashed migrations — at Version 2
Reported by: | NeodymiumFerBore | Owned by: | nobody |
---|---|---|---|
Component: | Core (Management commands) | Version: | 4.2 |
Severity: | Normal | Keywords: | squashed migration replaces sqlmigrate command core management |
Cc: | NeodymiumFerBore, David Sanders | Triage Stage: | Unreviewed |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hello!
The sqlmigrate
command does not follow replaces
in squashed migration, with original (squashed) migration files deleted. This ticket is roughly the same than #33583. In #31318, the issue is marked as solved with commit d883657. Since then, MigrationLoader
accepts the argument replace_migrations
. However, the loader instance here has this option to False
. I don't see a command option to set it to True
.
Sample error (not mine, but actually the exact same, taken from #33583):
python3 manage.py sqlmigrate beta 0003 Traceback (most recent call last): File "/Users/amin/sandbox/mysite/manage.py", line 22, in <module> main() File "/Users/amin/sandbox/mysite/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 414, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/sqlmigrate.py", line 38, in execute return super().execute(*args, **options) File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 460, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/sqlmigrate.py", line 46, in handle loader = MigrationLoader(connection, replace_migrations=False) File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 58, in __init__ self.build_graph() File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 276, in build_graph self.graph.validate_consistency() File "/usr/local/lib/python3.9/site-packages/django/db/migrations/graph.py", line 198, in validate_consistency [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] File "/usr/local/lib/python3.9/site-packages/django/db/migrations/graph.py", line 198, in <listcomp> [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] File "/usr/local/lib/python3.9/site-packages/django/db/migrations/graph.py", line 60, in raise_error raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) django.db.migrations.exceptions.NodeNotFoundError: Migration beta.0001_initial dependencies reference nonexistent parent node ('first', '0001_initial')
I tried to set it to True
manually in 4.1.7, and it successfully showed SQL queries involved in the migration I wanted to inspect. sqlmigrate.py
has not changed between 4.1.7 and 4.2, so I guess it also affects it.
Link: MigrationLoader instance in 4.1.7 L46
Link: MigrationLoader instance in 4.2 L46
Link: MigrationLoader instance in main L46
I see that it always has been like this since commit d883657
. Now maybe I don't understand why it works like so. Could you explain why it is set to False
with no option to set it to True
in sqlmigrate
? Is it unreliable? In #33583, someone said:
replaces
is documented and supported only for squashing migrations so described flow was never officially supported
Why not adding a command option to sqlmigrate
to enable following replaces
in squashed migration, with a warning like "experimental" or something?
Thank you.
Change History (2)
comment:1 by , 19 months ago
Cc: | added |
---|---|
Description: | modified (diff) |
comment:2 by , 19 months ago
Description: | modified (diff) |
---|