Create composite index from a Django model

django, django-models, python

Solution

Starting from django-1.5 you can make compound index using `index_together` meta option: https://docs.djangoproject.com/en/dev/ref/models/options/#index-together

Note (2023/01/30) `index_together` is deprecated since django-4.2. Instead, use much more powerful `indexes` meta option. With it you can create not only compound indexes, but also other types of indexes, e.g. function-based indexes, partial (conditional) indexes, covering indexes: https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.indexes

So, in your example index declaration would like this

from django.db import models

class PopulationData(models.Model):
    slot = models.IntegerField()
    sample = models.IntegerField()
    value = models.FloatField()

    class Meta:
        indexes = [
            models.Index("slot", "sample", name="population_slot_sample_idx")
        ]

Problem

I have the following model: ``` from django.db import models class PopulationData(models.Model): slot = models.IntegerField(db_index=True) sample = models.IntegerField() value = models.FloatField() class Meta: unique_together = (('slot', 'sample'),) ``` And I would like to create also a compound index on the column pair that have the `UNIQUE` constraint, like so: ``` CREATE INDEX my_compound_index ON myapp_populationdata (slot, sample); ``` Right now I have a separate code connected to the `post_syncdb` signal that issues the previous SQL statement. Is there any way to indicate it from the model specification? (Note: I'm using the 1.3 branch).

Original source

Related problems