ERROR: DefineIndex: index function must be marked iscachable

Started by Elielson Fontaneziover 22 years ago2 messagesgeneral
Jump to latest
#1Elielson Fontanezi
ElielsonF@prodam.sp.gov.br

Hi!

Who can help me on that?

First of all, my envoronment is:
Linux netlab142.prodam 2.4.8-26mdk #1 Sun Sep 23 17:06:39 CEST 2001
i686 unknown
pg_ctl (PostgreSQL) 7.2.

Problem: ERROR: DefineIndex: index function must be marked iscachable
by executing:

create index bt_proposta_f01 on proposta
using btree (func_cod_secretaria(nr_proponente));

Where nr_proponte is a integer type column.

The function is:

CREATE OR REPLACE FUNCTION func_cod_secretaria(INTEGER) RETURNS INTEGER AS '
DECLARE
v_nr_proponente ALIAS FOR $1;
BEGIN
return TRUNC(v_nr_proponente/100000,0)*100000
END;
' LANGUAGE 'plpgsql';

\\\!/< 55 11 5080 9283

!_"""_! Elielson Fontanezi
(O) (o) PRODAM - Technical Support
Analyst
-------------------------------oOOO--(_)--OOOo------------------------------
-----
Success usually comes to those who are too busy to be looking for it.
oooo0 0oooo
---------------------------( )----------(
)--------------------------------
\ ( ) /
\_/ \_/

#2Stephan Szabo
sszabo@megazone23.bigpanda.com
In reply to: Elielson Fontanezi (#1)
Re: ERROR: DefineIndex: index function must be marked

On Fri, 25 Jul 2003, Elielson Fontanezi wrote:

Who can help me on that?

First of all, my envoronment is:
Linux netlab142.prodam 2.4.8-26mdk #1 Sun Sep 23 17:06:39 CEST 2001
i686 unknown
pg_ctl (PostgreSQL) 7.2.

You should definately move to the highest 7.2 release (7.2.4 I think)
which shouldn't require a restore (although you should back up first in
any case). I think there were some reasonably important fixes between
7.2.1 and 7.2.4.

CREATE OR REPLACE FUNCTION func_cod_secretaria(INTEGER) RETURNS INTEGER AS '
DECLARE
v_nr_proponente ALIAS FOR $1;
BEGIN
return TRUNC(v_nr_proponente/100000,0)*100000
END;
' LANGUAGE 'plpgsql'

Add WITH (iscachable) after LANGUAGE 'plpgsql' to make the function usable
in the functional index unless I'm misremembering the old syntax.