Como posso indexar to_char()
uma coluna?
Eu tentei:
adam_db=> CREATE INDEX updates_hourly_idx
ON updates (to_char(update_time, 'YYYY-MM-DD HH24:00'));
Mas deu o erro:
ERRO: as funções na expressão de índice devem ser marcadas
IMMUTABLE
O que parece estranho, já que o to_char()
carimbo de data/hora é razoavelmente imutável.
Alguma ideia de como gerar esse índice?
Os formatos aceitos por
to_char(timestamp, text)
incluem padrões localizados que o tornam não imutável.Exemplo de resultados diferentes com a mesma entrada:
Se não estiver usando esse tipo de formato, a solução é criar sua própria função wrapper imutável,
e, em seguida, crie o índice nessa função.
Acabei de encontrar outra solução para esse problema com base nesta postagem no fórum -
EXTRACT(timestamp with time zone)
não é imutável, masEXTRACT(timestamp)
é . Assim é possível criar uma tabela comCREATE INDEX ON table (EXTRACT(MONTH FROM timestamp AT TIME ZONE 'UTC'))
.