Enligt denna tråd i hackarnas e-postlista:
http://www.mail-archive.com/[email protected]/msg86725.html
detta är avsett beteende som to_char
beror på LC_MESSAGES-inställningen
I ditt fall är detta tydligen inte vettigt eftersom formatet du använder aldrig kommer att bero på språket, så om du behöver använda textrepresentationen i indexet kan du skapa din egen to_char()-funktion och markera den som oföränderlig:
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;
Om du måste använda den som en text i indexet (och inte kan använda casten till ett datum som Sam föreslog) måste du skapa din egen formateringsfunktion som du kan markera som oföränderlig. Det kan sedan användas i indexet.
Men för att få Postgres till användning indexet du behöver för att anropa my_to_char()
i dina SQL-satser också. Den kommer inte att känna igen den när du använder den inbyggda to_char()
Men jag tror att Sams förslag att använda ett rakt datum i indexet förmodligen är bättre