Opened 10 years ago
Last modified 4 years ago
#23902 new Bug
Migrating between Geography / Geometry types fails
Reported by: | mitchell | Owned by: | nobody |
---|---|---|---|
Component: | GIS | Version: | 1.7 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Adding or removing the "geography=True
" argument to or from a GIS column generates a migration which then fails to run because the columns are two distinct types and cannot be converted between easily.
Exception:
Traceback (most recent call last): File "bin/django", line 9, in <module> load_entry_point('myproject==1.0.0', 'console_scripts', 'django')() File "/home/mitchell/myproject/myproject/manage.py", line 19, in main execute_from_command_line(argv) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line utility.execute() File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv self.execute(*args, **options.__dict__) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 160, in handle executor.migrate(targets, plan, fake=options.get("fake", False)) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 63, in migrate self.apply_migration(migration, fake=fake) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 97, in apply_migration migration.apply(project_state, schema_editor) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 107, in apply operation.database_forwards(self.app_label, schema_editor, project_state, new_state) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 139, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "/home/mitchell/myproject/local/lib/python2.7/site-packages/django/db/backends/schema.py", line 459, in alter_field raise ValueError("Cannot alter field %s into %s - they do not properly define db_type (are you using PostGIS 1.5 or badly-written custom fields?)" % ( ValueError: Cannot alter field main.Venue.coordinates into main.Venue.coordinates - they do not properly define db_type (are you using PostGIS 1.5 or badly-written custom fields?)
Django 1.7.1.
Change History (6)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Triage Stage: | Unreviewed → Accepted |
---|
Maybe a better error message is needed; I am not quite sure.
comment:4 by , 5 years ago
This isn't fixed. Migrating a geometry field to geography works but the other way round doesn't, including reversing a geometry -> geography migration.
comment:6 by , 4 years ago
The temporary solution is a classic three-step migration:
- Create a new column with the desired type.
- Copy values from the legacy column to the new column with a data migration.
- Delete the legacy column (and maybe rename the new column if you want to get back to the initial column name).
Similar to #28809.
Do you have a suggestion on how we should proceed?