Django db_index = True не создает индекс, но мета-индексы класса да - PullRequest
0 голосов
/ 29 декабря 2018

В моей модели django при создании индексов через db_index = True в определениях полей индекс не создается.Только если я создал в классе Meta

class Agreement(UUIDPrimaryKey):
  job = models.ForeignKey(           
    'posts.Job',                   
    on_delete=models.CASCADE,      
    verbose_name=_("job"),         
  )
  class Meta:
    indexes = (
      models.Index(fields=['job']),
    )

И если я запустил makemigrations, индекс будет создан.

Create index agreements__job_id_eb7df0_idx on field(s) job of model agreement

Но если я изменю свою модель на:

class Agreement(UUIDPrimaryKey):
  job = models.ForeignKey(           
    'posts.Job',                   
    on_delete=models.CASCADE,      
    verbose_name=_("job"),
    db_index=True,
  )

И я запускаю makemigrations, индекс удаляется.

 Remove index agreements__job_id_eb7df0_idx from agreement

Не должны ли быть одинаковыми оба определения?

ОБНОВЛЕНИЕ

Документация говорит, что они одинаковы.Да, оба создают индекс .. но если вы создаете индексы в Meta и не указываете db_index = False в определении поля, создаются два индекса .

Это до установки db_index = Falseв поле

psql# select indexname from pg_indexes where tablename like 'agreemen%';

                 indexname                  
--------------------------------------------
 agreements__job_id_eb7df0_idx
 agreements_agreement_job_id_id_c26bd828
 agreements_agreement_pkey

и после установки db_index = False и запущенных миграций / миграции

           indexname           
-------------------------------
 agreements__job_id_eb7df0_idx
 agreements_agreement_pkey

1 Ответ

0 голосов
/ 29 декабря 2018

Индекс базы данных автоматически создается на ForeignKey.По крайней мере, так говорится в документации: https://docs.djangoproject.com/en/2.1/ref/models/fields/#foreignkey. Так что нет необходимости устанавливать db_index=True в поле ForeignKey вашей модели.Опция все еще там, если вы не хотите индекс (db_index=False).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...