Как создать индекс на основе функции в моей миграции модели Python? - PullRequest
0 голосов
/ 17 марта 2019

Я использую Django, Python 3.7 и PostGres 9.5. Чтобы ускорить выполнение определенного запроса, я хочу создать этот функциональный индекс, который я обычно делал бы в PostGres следующим образом ...

CREATE INDEX my_article_idx ON article (regexp_replace(url, '\?.*$', ''))

Однако в мире Django и автоматически сгенерированных миграций я не уверен, как аннотировать мой класс в моем файле models.py, чтобы этот основанный на функциях индекс создавался автоматически. Рассматриваемое поле в моей модели выглядит следующим образом ...

class Article(models.Model):
    ...
    url = models.TextField(default='', null=False)

1 Ответ

1 голос
/ 17 марта 2019

Вы должны создать миграцию данных. Подробнее о них читайте в документах

Шаг 1 - создать пустые миграции данных

python manage.py makemigrations --empty yourappname

Шаг 2 - Добавить пользовательский sql в миграцию:

# -*- coding: utf-8 -*-
# Generated by Django 1.11.14 on 2018-09-20 08:01
from __future__ import unicode_literals

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('yourapp', '0001_name_of_depending_migration'),
    ]

    operations = [
        migrations.RunSQL(
            sql="CREATE INDEX my_article_idx ON article (regexp_replace(url, '\?.*$', ''))",
            reverse_sql='DROP INDEX my_article_idx ON article'
        )
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...