Согласно этой теме в списке рассылки хакеров:
http://www.mail-archive.com/pgsql-hackers@postgresql.org/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;
Если вам нужно использовать его как текст в индексе (и вы не можете использовать приведение кдата, как предложил Сэм) вам нужно будет создать собственную функцию форматирования, которую вы можете пометить как неизменную.Затем его можно использовать в индексе.
Но для того, чтобы Postgres использовал индекс, вам нужно будет также вызвать my_to_char()
в ваших операторах SQL.Он не распознает его, когда вы используете встроенный to_char()
Но я думаю, что предложение Сэма с использованием прямой даты в индексе, вероятно, лучше