D'après ce fil de la liste de diffusion des hackers :
http://www.mail-archive.com/[email protected]/msg86725.html
ceci est un comportement prévu comme to_char
dépend du paramètre LC_MESSAGES
Dans votre cas, cela n'a apparemment aucun sens car le format que vous utilisez ne dépendra jamais des paramètres régionaux, donc si vous avez besoin d'utiliser la représentation textuelle dans l'index, vous pouvez créer votre propre fonction to_char() et la marquer comme immuable :
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;
Si vous devez l'utiliser comme texte dans l'index (et que vous ne pouvez pas utiliser le cast à une date comme Sam l'a suggéré), vous devrez créer votre propre fonction de formatage que vous pourrez marquer comme immuable. Cela peut ensuite être utilisé dans l'index.
Mais pour que Postgres utilise l'index dont vous aurez besoin pour appeler my_to_char()
également dans vos instructions SQL. Il ne le reconnaîtra pas lorsque vous utiliserez le to_char()
intégré
Mais je pense que la suggestion de Sam d'utiliser une date simple dans l'index est probablement meilleure