Как создать индекс postgres db для jsonfield в Django с помощью ORM?
Я сделал миграцию и добавил именно этот sql:
migrations.RunSQL("CREATE INDEX my_json_idx on my_table((my_json_data->'id'));")
Это работает.
Все, что я пытаюсь сделать, это получить точный эквивалент, но используя Django ORM, чтобы я мог поместить что-то в мой models.py
файл в
class Meta:
indexes=[...]
Таким образом, всем этим можно управлять на уровне "кода", а django позаботится обо всем остальном.
Я попробовал следующее:
models.Index(KeyTextTransform('id', 'my_json_data'), name='my_json_idx')
Это прекрасно создает индекс, но использует ->>
что-то вроде CREATE INDEX my_json_idx on my_table((my_json_data->>'id'));")
.
Что является проблемой, потому что запросы из django orm, такие как
my_table.objects.filter(my_json_data__id=123)
переводятся в ->
в ORM. И индекс в итоге пропускается.
Делается полное сканирование.