В моей модели 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