Есть ли способ ускорить работу 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, скажем), это происходит довольно медленно.
Есть ли простой способ ускорить создание ограничения, которое говорит: "Только одна версия этого имени (игнорируя регистр) должна быть в таблице"?
Я могу отказаться от ограничения.
Я мог бы также добавить поле, которое все строчные буквы, и наложить уникальное ограничение на это поле. Это была бы лишняя информация в БД (кэш), но ради производительности.