PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

ERRO:funções na expressão de índice devem ser marcadas IMMUTABLE no Postgres


De acordo com este tópico na lista de discussão de hackers:

http://www.mail-archive.com/[email protected]/msg86725.html

este é um comportamento pretendido como to_char depende da configuração LC_MESSAGES

No seu caso, aparentemente, isso não faz sentido, pois o formato que você está usando nunca dependerá da localidade, portanto, se você precisar usar a representação de texto no índice, poderá criar sua própria função to_char() e marcá-la como imutável:
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;

Se você precisar usá-lo como um texto no índice (e não puder usar a conversão para uma data como Sam sugeriu), precisará criar sua própria função de formatação que pode marcar como imutável. Isso pode ser usado no índice.

Mas para fazer o Postgres usar o índice que você precisará chamar my_to_char() em suas instruções SQL também. Ele não irá reconhecê-lo quando você usar o to_char() embutido

Mas acho que a sugestão de Sam usando uma data direta no índice é provavelmente melhor