Според тази тема в пощенския списък на хакерите:
http://www.mail-archive.com/[email protected]/msg86725.html
това е предвидено поведение като to_char
зависи от настройката LC_MESSAGES
Във вашия случай това очевидно няма смисъл, тъй като форматът, който използвате, никога няма да зависи от локала, така че ако трябва да използвате текстовото представяне в индекса, можете да създадете своя собствена функция to_char() и да я маркирате като неизменно:
CREATE OR REPLACE FUNCTION my_to_char(some_time timestamp)
RETURNS text
AS
$BODY$
select to_char($1, 'yyyy-mm-dd');
$BODY$
LANGUAGE sql
IMMUTABLE;
Ако трябва да го използвате като текст в индекса (и не можете да използвате прехвърлянето към дата, както Сам предложи), ще трябва да създадете своя собствена функция за форматиране, която можете да маркирате като неизменна. След това може да се използва в индекса.
Но за да накарате Postgre да използва индексът, който ще трябва да извикате my_to_char()
и във вашите SQL изрази. Той няма да го разпознае, когато използвате вградения to_char()
Но мисля, че предложението на Сам да използва директна дата в индекса вероятно е по-добро