#34510 closed Uncategorized (invalid)
sqlmigrate does not follows replaces in squashed migrations
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!
I actually don't know if this issue will end being a bug, a new feature or a documentation improvement.
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 (5)
comment:1 by , 19 months ago
Cc: | added |
---|---|
Description: | modified (diff) |
comment:2 by , 19 months ago
Description: | modified (diff) |
---|
comment:3 by , 19 months ago
Description: | modified (diff) |
---|---|
Type: | Bug → Uncategorized |
comment:4 by , 19 months ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:5 by , 19 months ago
Cc: | added |
---|
Hello,
Sorry I don't think there is any issue here.
The documentation states when removing replaced migrations, the
replaces
attributes must also be removed.I ran a test to see if there were any issues with sqlmigrate & deleted squashed migrations and it behaves as expected.
Closing as invalid. If there's any extra information that comes to light or if there's something that I'm missing here feel free to add a comment 👍