On Fri, Jul 4, 2014 at 7:43 AM, Thiago <[email protected]> wrote:

> select *
> from public.stfil021_new a
> where
>    a.movdatmov between functions.sp_data(:ano,:mes,'P') and
> functions.sp_data(:ano,:mes,'U')
>
> Seq Scan on stfil021_new a  (cost=0.00..21892087.82 rows=4434288 width=121)
>   Filter: ((movdatmov >= functions.sp_data(2014, 7, 'P'::character
> varying)) AND (movdatmov <= functions.sp_data(2014, 7, 'U'::character
> varying)))
>

Provavelmente sua função está marcada como VOLATILE, para utilizá-la com o
índice, você deve marcá-la como IMMUTABLE:

    ALTER FUNCTION functions.sp_data(<tipos parâmetros>) IMMUTABLE;

O único problema é se você estiver usando "timestamp with time zone" ela
pode não ser de fato IMMUTABLE, nesse caso uma análise mais cuidadosa
deveria ser feita.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a