Thread: ERROR: DefineIndex: index function must be marked iscachable

ERROR: DefineIndex: index function must be marked iscachable

From
Elielson Fontanezi
Date:
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
---------------------------(    )----------(    )--------------------------------
                            \  (            )  /
                             \_/            \_/

 

Re: [GENERAL] ERROR: DefineIndex: index function must be marked

From
Stephan Szabo
Date:
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.