Могу ли я легко переопределить Django ORM 'iexact', чтобы использовать LOWER() вместо UPPER()?

Использование Django 1.3x.

В настоящее время у меня есть очень, очень большой и очень, очень активный набор данных Postgres, который имеет важный столбец, проиндексированный как lower(column).

Я только что понял, что некоторые обычные запросы выполняются довольно медленно, потому что Django ORM генерирует запрос для поля как blah = UPPER(column), когда я использую iexact для соответствия этому полю.

Есть ли простой способ заставить ORM использовать lower() вместо этого, или мне нужно перейти на сырой SQL для этого?

Спасибо!

[побочный вопрос для комментариев: Есть ли веская причина, если не учитывать, использовать upper() для индекса, а не lower()?

6
задан anonymous coward 26 January 2012 в 20:47
поделиться