base_adresse: add indexes on on geographic models names (#66694)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Benjamin Dauvergne 2022-06-28 12:35:21 +02:00
parent 60bcc9d82e
commit c39c0d962a
2 changed files with 90 additions and 5 deletions

View File

@ -0,0 +1,68 @@
# Generated by Django 3.2.18 on 2023-03-17 11:04
import django.contrib.postgres.indexes
import django.db.models.functions.text
from django.contrib.postgres import operations as postgresql_operations
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base_adresse', '0030_auto_20220627_1511'),
]
operations = [
postgresql_operations.TrigramExtension(),
migrations.AlterField(
model_name='citymodel',
name='code',
field=models.CharField(db_index=True, max_length=5, verbose_name='INSEE code'),
),
migrations.AlterField(
model_name='citymodel',
name='zipcode',
field=models.CharField(db_index=True, max_length=5, verbose_name='Postal code'),
),
migrations.AlterField(
model_name='streetmodel',
name='ban_id',
field=models.CharField(db_index=True, max_length=32, null=True, verbose_name='BAN Identifier'),
),
migrations.AlterField(
model_name='streetmodel',
name='citycode',
field=models.CharField(db_index=True, max_length=5, verbose_name='City Code'),
),
migrations.AlterField(
model_name='streetmodel',
name='zipcode',
field=models.CharField(db_index=True, max_length=5, verbose_name='Postal code'),
),
migrations.AddIndex(
model_name='citymodel',
index=models.Index(
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_city_name_idx'
),
),
migrations.AddIndex(
model_name='departmentmodel',
index=models.Index(
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_dept_name_idx'
),
),
migrations.AddIndex(
model_name='regionmodel',
index=models.Index(
django.db.models.functions.text.Upper('unaccent_name'), name='base_adresse_region_name_idx'
),
),
migrations.AddIndex(
model_name='streetmodel',
index=django.contrib.postgres.indexes.GinIndex(
django.contrib.postgres.indexes.OpClass(
django.db.models.functions.text.Upper('unaccent_name'), 'gin_trgm_ops'
),
name='base_adresse_street_name_idx',
),
),
]

View File

@ -5,9 +5,11 @@ import json
from io import StringIO
from urllib import parse as urlparse
from django.contrib.postgres import indexes as postgresql_indexes
from django.core.exceptions import FieldError
from django.db import connection, models
from django.db.models import JSONField, Q
from django.db.models.functions import Upper
from django.utils import timezone
from django.utils.http import urlencode
from django.utils.translation import gettext_lazy as _
@ -722,19 +724,25 @@ class UnaccentNameMixin:
class StreetModel(UnaccentNameMixin, models.Model):
ban_id = models.CharField(_('BAN Identifier'), max_length=32, null=True)
ban_id = models.CharField(_('BAN Identifier'), max_length=32, null=True, db_index=True)
city = models.CharField(_('City'), max_length=150)
name = models.CharField(_('Street name'), max_length=150)
unaccent_name = models.CharField(_('Street name ascii char'), max_length=150, null=True)
zipcode = models.CharField(_('Postal code'), max_length=5)
zipcode = models.CharField(_('Postal code'), max_length=5, db_index=True)
type = models.CharField(_('Street type'), max_length=30)
citycode = models.CharField(_('City Code'), max_length=5)
citycode = models.CharField(_('City Code'), max_length=5, db_index=True)
last_update = models.DateTimeField(_('Last update'), null=True, auto_now=True)
resource = models.ForeignKey(BaseAdresse, on_delete=models.CASCADE, verbose_name=_('BAN Connector'))
class Meta:
ordering = ['unaccent_name', 'name']
indexes = [
postgresql_indexes.GinIndex(
postgresql_indexes.OpClass(Upper('unaccent_name'), 'gin_trgm_ops'),
name='%(app_label)s_street_name_idx',
),
]
def __str__(self):
return self.name
@ -759,6 +767,9 @@ class RegionModel(UnaccentNameMixin, models.Model):
class Meta:
ordering = ['code']
unique_together = ('resource', 'code')
indexes = [
models.Index(Upper('unaccent_name'), name='%(app_label)s_region_name_idx'),
]
def __str__(self):
return '%s %s' % (self.code, self.name)
@ -786,6 +797,9 @@ class DepartmentModel(UnaccentNameMixin, models.Model):
class Meta:
ordering = ['code']
unique_together = ('resource', 'code')
indexes = [
models.Index(Upper('unaccent_name'), name='%(app_label)s_dept_name_idx'),
]
def __str__(self):
return '%s %s' % (self.code, self.name)
@ -794,8 +808,8 @@ class DepartmentModel(UnaccentNameMixin, models.Model):
class CityModel(UnaccentNameMixin, models.Model):
name = models.CharField(_('City name'), max_length=150)
unaccent_name = models.CharField(_('City name ascii char'), max_length=150, null=True)
code = models.CharField(_('INSEE code'), max_length=5)
zipcode = models.CharField(_('Postal code'), max_length=5)
code = models.CharField(_('INSEE code'), max_length=5, db_index=True)
zipcode = models.CharField(_('Postal code'), max_length=5, db_index=True)
population = models.PositiveIntegerField(_('Population'))
department = models.ForeignKey(DepartmentModel, on_delete=models.CASCADE, blank=True, null=True)
region = models.ForeignKey(RegionModel, on_delete=models.CASCADE, blank=True, null=True)
@ -821,6 +835,9 @@ class CityModel(UnaccentNameMixin, models.Model):
class Meta:
ordering = ['-population', 'zipcode', 'unaccent_name', 'name']
unique_together = ('resource', 'code', 'zipcode')
indexes = [
models.Index(Upper('unaccent_name'), name='%(app_label)s_city_name_idx'),
]
def __str__(self):
return '%s %s' % (self.zipcode, self.name)