> Qdo uso o to_date o indice não é usado tem alguma outra forma de > formatar a data e a consulta usar o indice ? Você deve criar um índice usando a função (** Desde que esta seja IMMUTABLE)
trisso=> CREATE INDEX idx_foo_dt_to_date ON foo (TO_DATE(dt::text,'YYYYMMDD')); ERRO: funções em expressão de índice devem ser IMMUTABLE A date_part não é immutable, pois depende de configurações de LOCALE (Runtime)... Você poderia usar a date, e alterar a comparação para o formata de data : trisso=> create INDEX idx_foo_dt_to_date ON foo (DATE(dt)); CREATE INDEX trisso=> EXPLAIN ANALYZE SELECT * FROM foo WHERE date(dt) between '2008-01-01'::date AND '2008-12-31'::date; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ Bitmap Heap Scan on foo (cost=4.32..13.83 rows=6 width=44) (actual time=0.231..0.802 rows=1000 loops=1) Recheck Cond: ((date(dt) >= '2008-01-01'::date) AND (date(dt) <= '2008-12-31'::date)) -> Bitmap Index Scan on idx_foo_dt_to_date (cost=0.00..4.32 rows=6 width=0) (actual time=0.195..0.195 rows=1000 loops=1) Index Cond: ((date(dt) >= '2008-01-01'::date) AND (date(dt) <= '2008-12-31'::date)) Total runtime: 1.195 ms (5 registros) -- Att: Thiago Risso _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral