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