Volgens deze thread in de mailinglijst van hackers:
http://www.mail-archive.com/[email protected]/msg86725.html
dit is bedoeld gedrag als to_char
hangt af van de LC_MESSAGES-instelling
In jouw geval is dit blijkbaar niet logisch, aangezien het formaat dat je gebruikt nooit afhankelijk zal zijn van de landinstelling, dus als je de tekstrepresentatie in de index moet gebruiken, kun je je eigen to_char()-functie maken en deze markeren als onveranderlijk:
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;
Als je het als tekst in de index moet gebruiken (en de cast naar een datum niet kunt gebruiken zoals Sam suggereerde), moet je je eigen opmaakfunctie maken die je als onveranderlijk kunt markeren. Dat kan dan in de index worden gebruikt.
Maar om Postgres te laten gebruiken de index die je nodig hebt om my_to_char()
. aan te roepen ook in uw SQL-instructies. Het zal het niet herkennen als je de ingebouwde to_char()
. gebruikt
Maar ik denk dat Sam's suggestie om een rechtstreekse datum in de index te gebruiken waarschijnlijk beter is