Есть ли способ ускорить работу Django UniqueConstraint без учета регистра?

В документации Django показан такой пример UniqueConstraint:

UniqueConstraint(Lower('name').desc(), 'category', name='unique_lower_name_category')

Во-первых, desc() выдает ошибки в интерфейсе администратора. (Отредактированная версия ниже.)

ProgrammingError at /admin1/app/tablename/add/
syntax error at or near "DESC"
LINE 1: ...lename" WHERE LOWER("tablename"."name") DESC = (LO...
                                                             ^
Request Method: POST
Request URL:    http://host/admin/app/tablename/add/?_changelist_filters=a_val
Django Version: 4.1.5
Exception Type: ProgrammingError
Exception Value:    
syntax error at or near "DESC"
LINE 1: ...lename" WHERE LOWER("tablename"."name") DESC = (LO...

Ладно, не берите в голову. Давайте отбросим desc(). И у меня нет двух полей, у меня только одно. Так что посмотрите на это UniqueConstraint:

UniqueConstraint(Lower('name'), 'name', name='unique_lower_name')

Когда я загружаю данные в эту таблицу в Postgres (13 или 14, скажем), это происходит довольно медленно.

Есть ли простой способ ускорить создание ограничения, которое говорит: "Только одна версия этого имени (игнорируя регистр) должна быть в таблице"?

Я могу отказаться от ограничения.

Я мог бы также добавить поле, которое все строчные буквы, и наложить уникальное ограничение на это поле. Это была бы лишняя информация в БД (кэш), но ради производительности.

Вернуться на верх