Opened 9 years ago
Closed 9 years ago
#27056 closed Bug (fixed)
changing dim property for geometries does not generate correct migration on PostgreSQL
| Reported by: | Bill Durr | Owned by: | nobody |
|---|---|---|---|
| Component: | Migrations | Version: | dev |
| Severity: | Normal | Keywords: | geodjango postgres postgis |
| Cc: | 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
Changing the dim property for a geometry field does not generate a migration that changes the number of dimensions a geometry in the DB has.
Changing a field in a model from models.LineStringField(null=True) to models.LineStringField(null=True, dim=3) creates the following migration and sql:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.8 on 2016-08-12 15:28
from __future__ import unicode_literals
import django.contrib.gis.db.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('rivermap', '0026_auto_20160624_1827'),
]
operations = [
migrations.AlterField(
model_name='sectionextra',
name='streamPath',
field=django.contrib.gis.db.models.fields.LineStringField(dim=3, null=True, srid=4326),
),
]
BEGIN; -- -- Alter field streamPath on sectionextra -- ALTER TABLE "rivermap_sectionextra" ALTER COLUMN "streamPath" TYPE geometry(LINESTRINGZ,4326) USING "streamPath"::geometry(LINESTRINGZ,4326); COMMIT;
This causes an exception during migration because PostGIS returned the following error
Column has Z dimension but geometry does not
According to http://gis.stackexchange.com/questions/109410/postgis-column-has-z-dimension-but-geometry-does-not the ST_Force3D function needs to be used for the USING clause.
Change History (5)
comment:1 by , 9 years ago
| Component: | Uncategorized → Migrations |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
| Version: | 1.9 → master |
comment:2 by , 9 years ago
| Has patch: | set |
|---|
comment:3 by , 9 years ago
| Summary: | changing dim property for gemotries does not generate correct migration → changing dim property for geometries does not generate correct migration on PostgreSQL |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
Looks good, pending a few cosmetic issues.
I added a pull request to fix this on PostGIS: PR.
On Spatialite, things are currently a bit messy, for several different reasons. It's currently not possible to alter geometry fields on Spatialite. I would suggest to commit the PostGIS changes and to open another ticket specific to Spatialite (which might take longer to solve).