Opened 9 years ago

Last modified 3 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 Tim Graham, 9 years ago

Do you have a suggestion on how we should proceed?

comment:2 by Tim Graham, 9 years ago

Triage Stage: UnreviewedAccepted

Maybe a better error message is needed; I am not quite sure.

comment:3 by Sergey Fedoseev, 7 years ago

It seems that it's fixed in #25002.

comment:4 by Victor Munene, 4 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:5 by Mihail Cristian Dumitru, 3 years ago

Hello,

Any update on this? Or at least a temporary solution.

Thank you!

comment:6 by Claude Paroz, 3 years ago

The temporary solution is a classic three-step migration:

  1. Create a new column with the desired type.
  2. Copy values from the legacy column to the new column with a data migration.
  3. Delete the legacy column (and maybe rename the new column if you want to get back to the initial column name).

Similar to #28809.

Note: See TracTickets for help on using tickets.
Back to Top