Tom Lane ha scritto:
Edoardo Panfili <edoardo@xxxxxxxx> writes:
my enumerated type is (this is a subset)
CREATE TYPE hibridation AS ENUM('none','genus','specie');
function declaration
CREATE FUNCTION ename(text,boolean,text,text RETURNS text AS
'funzioniGDB.so' LANGUAGE C IMMUTABLE;
index creation (the type of ibrido is hibridation)
CREATE INDEX i_specie_nome_specie ON specie
(esterna_nome(ibrido::text,proParte,genere,specie));
the result is
ERROR: functions in index expression must be marked IMMUTABLE
Now, maybe for your purposes here it's okay to consider it immutable.
In that case what I'd suggest doing is redefining ename() to take the
enum directly. You could invoke enum_out within the function if you
really need a text equivalent.
thank you! this is the right way for me.
Now it works.
But i have a little question about parameters of enum_out.
Datum enum_out(PG_FUNCTION_ARGS);
this is a part of my function
-----------------------------------------------------------
Datum esterna_nome2(PG_FUNCTION_ARGS){
int label;
label = enum_out(fcinfo);
sprintf(debug,"false enum_out: \"%s\" ",unrolled);
elog(LOG, debug);
-----------------------------------------------------------
but it works only because my enum parameter is the first (and using
fcinfo is a little obscure).
I must build a FunctionCallInfo structure (I think) but how?
Edoardo