On 04/07/2014 07:57, Matheus de Oliveira wrote:

On Fri, Jul 4, 2014 at 7:43 AM, Thiago
<zan...@farmaponte.com.br
<mailto:zan...@farmaponte.com.br>> 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 <http://www.dextra.com.br/postgres/>



Matheus, muito obrigado, deu certo.
Vou estudar um pouco sobre isso. Interessante que agente aprende a criar as funções, pl_pg mas nunca levei muito em consideração estas opções.

Se souber de algum artigo para me indicar.

Obrigado!

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a