Refs #31196 -- Installed postgis_raster extension on PostGIS 3+.

This commit is contained in:
Claude Paroz 2020-04-10 22:30:25 +02:00 committed by Mariusz Felisiak
parent cc70a0343e
commit a6b4c07b6e
7 changed files with 93 additions and 2 deletions

View File

@ -50,6 +50,11 @@ process. An alternative is to use a migration operation in your project::
...
]
If you plan to use PostGIS raster functionality on PostGIS 3+, you should also
activate the ``postgis_raster`` extension. You can install the extension using
the :class:`~django.contrib.postgres.operations.CreateExtension` migration
operation, or directly by running ``CREATE EXTENSION postgis_raster;``.
GeoDjango does not currently leverage any `PostGIS topology functionality`__.
If you plan to use those features at some point, you can also install the
``postgis_topology`` extension by issuing ``CREATE EXTENSION

View File

@ -0,0 +1,18 @@
from django.db import connection, migrations
if connection.features.supports_raster:
from django.contrib.postgres.operations import CreateExtension
pg_version = connection.ops.postgis_version_tuple()
class Migration(migrations.Migration):
# PostGIS 3+ requires postgis_raster extension.
if pg_version[1:] >= (3,):
operations = [
CreateExtension('postgis_raster'),
]
else:
operations = []
else:
class Migration(migrations.Migration):
operations = []

View File

@ -69,4 +69,7 @@ class Migration(migrations.Migration):
"""
Used for gis-specific migration tests.
"""
dependencies = [
('gis_migrations', '0001_setup_extensions'),
]
operations = ops

View File

@ -36,8 +36,8 @@ class MigrateTests(TransactionTestCase):
self.assertTableExists("gis_migrations_family")
if connection.features.supports_raster:
self.assertTableExists("gis_migrations_heatmap")
# Unmigrate everything
call_command("migrate", "gis_migrations", "zero", verbosity=0)
# Unmigrate models.
call_command("migrate", "gis_migrations", "0001", verbosity=0)
# All tables are gone
self.assertTableNotExists("gis_migrations_neighborhood")
self.assertTableNotExists("gis_migrations_household")

View File

@ -0,0 +1,18 @@
from django.db import connection, migrations
if connection.features.supports_raster:
from django.contrib.postgres.operations import CreateExtension
pg_version = connection.ops.postgis_version_tuple()
class Migration(migrations.Migration):
# PostGIS 3+ requires postgis_raster extension.
if pg_version[1:] >= (3,):
operations = [
CreateExtension('postgis_raster'),
]
else:
operations = []
else:
class Migration(migrations.Migration):
operations = []

View File

@ -0,0 +1,47 @@
from django.contrib.gis.db import models
from django.db import migrations
from django.db.models import deletion
class Migration(migrations.Migration):
dependencies = [
('rasterapp', '0001_setup_extensions'),
]
operations = [
migrations.CreateModel(
name='RasterModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rast', models.fields.RasterField(
blank=True,
null=True,
srid=4326,
verbose_name='A Verbose Raster Name',
)),
('rastprojected', models.fields.RasterField(
null=True,
srid=3086,
verbose_name='A Projected Raster Table',
)),
('geom', models.fields.PointField(null=True, srid=4326)),
],
options={
'required_db_features': ['supports_raster'],
},
),
migrations.CreateModel(
name='RasterRelatedModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rastermodel', models.ForeignKey(
on_delete=deletion.CASCADE,
to='rasterapp.rastermodel',
)),
],
options={
'required_db_features': ['supports_raster'],
},
),
]