Обсуждение: urgent help on function/trigger

Поиск
Список
Период
Сортировка

urgent help on function/trigger

От
jprem
Дата:
hello,
i have a procedure and a trigger as below
______________________________________________________________________
create function FUNCTEST () returns opaque
as
'begin
 delete from X where COLX in (select COLX from X
 where COLX not in (select COLY from Y ));
 return null;
 end;'
language 'plpgsql';

create trigger TRIGTEST after delete on Y for each row
execute procedure FUNCTEST();
________________________________________________________________________

i need some tuples to be deleted from X while i delete some from Y.

the function and trigger are created without any problem.
when i delete a tuple from Y , i get the following error.
_________________________________________________________________________

ERROR:  fmgr_info: function 152480: cache lookup failed
_________________________________________________________________________

why this error is due to ? can anyone help me on this ?
thanx in advance.


Re: urgent help on function/trigger

От
Jesus Aneiros
Дата:
Something similar happened to me. Did you create the function, then the
triger, found some error in the function then drop the function and
created again? The table of triggers is pointing to a function's oid that
is different now (that's what I figured out because I don't have the
source code). Drop the function and the trigger and create them again.

Regards, Jesus.

On Mon, 17 Jul 2000, jprem wrote:

> hello,
> i have a procedure and a trigger as below
> ______________________________________________________________________
> create function FUNCTEST () returns opaque
> as
> 'begin
>  delete from X where COLX in (select COLX from X
>  where COLX not in (select COLY from Y ));
>  return null;
>  end;'
> language 'plpgsql';
>
> create trigger TRIGTEST after delete on Y for each row
> execute procedure FUNCTEST();
> ________________________________________________________________________
>
> i need some tuples to be deleted from X while i delete some from Y.
>
> the function and trigger are created without any problem.
> when i delete a tuple from Y , i get the following error.
> _________________________________________________________________________
>
> ERROR:  fmgr_info: function 152480: cache lookup failed
> _________________________________________________________________________
>
> why this error is due to ? can anyone help me on this ?
> thanx in advance.
>


Re: urgent help on function/trigger

От
"Alex Bolenok"
Дата:
> hello,
> i have a procedure and a trigger as below
> ______________________________________________________________________
> create function FUNCTEST () returns opaque
> as
> 'begin
>  delete from X where COLX in (select COLX from X
>  where COLX not in (select COLY from Y ));
>  return null;
>  end;'
> language 'plpgsql';
>
> create trigger TRIGTEST after delete on Y for each row
> execute procedure FUNCTEST();
> ________________________________________________________________________
>
> i need some tuples to be deleted from X while i delete some from Y.
>
> the function and trigger are created without any problem.
> when i delete a tuple from Y , i get the following error.
> _________________________________________________________________________
>
> ERROR:  fmgr_info: function 152480: cache lookup failed
> _________________________________________________________________________
>
> why this error is due to ? can anyone help me on this ?
> thanx in advance.

Well, this error appears when you recreate the function without dropping the
trigger. You should drop and create the trigger every time you drop the
function.

BTW, you can implement the feature you want using FOREIGN KEY constraints -
they do the same things. Just create your tables as follows:

CREATE TABLE Y (
    ...,
    COLY INT4,
    ...,
);
CREATE TABLE X (
    ...,
    COLX INT4,
    ...,
    CONSTRAINT fk_colx_coly
        FOREIGN KEY (COLX)
        REFERENCES Y(COLY)
        ON DELETE CASCADE
);

and this feature will be implemented automatically.

Alex Bolenok.