Hi all,

I have a problem in a trigger that disable all the triggers of a table. This
error occurs randomly and my guess is that occurs when i have a lot of
concurrents inserts in the table participation.

The error is :  RelationBuildTriggers: 2 record(s) not found for rel
participation

I search all the web and not found a solution...

Please help me...

This is my trigger code :

CREATE OR REPLACE FUNCTION buy4tickets()
  RETURNS "trigger" AS
'
DECLARE
        mysequence bigint;
        idticket2 bigint;
        idticket3 bigint;
        idticket4 bigint;

        idticketservice bigint;
        idticketservice1 bigint;
        idticketservice2 bigint;
        idticketservice3 bigint;
        idticketservice4 bigint;
        tablename varchar;
        ticketnumberid2 varchar;
        ticketnumberid3 varchar;
        ticketnumberid4 varchar;
BEGIN
        idticketservice1 := 15;
        idticketservice2 := 16;
        idticketservice3 := 17;
        idticketservice4 := 18;

        tablename := ''participation'';

        RAISE NOTICE ''idticketservice1 = % '', idticketservice1;
        RAISE NOTICE ''idticketservice2 = % '', idticketservice2;
        RAISE NOTICE ''idticketservice3 = % '', idticketservice3;
        RAISE NOTICE ''idticketservice4 = % '', idticketservice4;

        IF NEW.fk_id_ticket IS NOT NULL THEN
                SELECT INTO idticketservice, mysequence fk_id_ticket, sequence 
FROM ticket
WHERE id = NEW.fk_id_ticket;
                RAISE NOTICE ''idticketservice = % '', idticketservice;

                IF idticketservice = idticketservice1 THEN
                        RAISE NOTICE ''idticketservice1 = idticketservice '';

                        RAISE NOTICE ''mysequence = % '', mysequence;

                        SELECT INTO idticket2,ticketnumberid2 id,numberid FROM 
ticket WHERE
fk_id_ticket = idticketservice2::int8 AND sequence = mysequence::int8;
                        RAISE NOTICE ''idticket2 = % '', idticket2;

                        SELECT INTO idticket3,ticketnumberid3 id,numberid FROM 
ticket WHERE
fk_id_ticket = idticketservice3::int8 AND sequence = mysequence::int8;
                        RAISE NOTICE ''idticket3 = % '', idticket3;

                        SELECT INTO idticket4,ticketnumberid4 id,numberid FROM 
ticket WHERE
fk_id_ticket = idticketservice4::int8 AND sequence = mysequence::int8;
                        RAISE NOTICE ''idticket4 = % '', idticket4;

                        EXECUTE ''update pg_class set reltriggers=0 where 
relname = '' ||
quote_literal(tablename);

                        IF idticket2 IS NOT NULL THEN

                                EXECUTE ''insert into participation''
                                        || ''(ani, dnis, fk_id_participation, 
fk_id_ticket, fk_id_service,
datetimepart, status, ticketsequence, fk_id_ticketservice, ticketnumberid)''
                                        || '' values( '' || 
quote_literal(NEW.ani) || '','' ||
quote_literal(NEW.dnis) || '',''
                                        || NEW.fk_id_participation || '',''|| 
idticket2 || '','' ||
quote_literal(NEW.fk_id_service) || '',''
                                        || quote_literal(NEW.datetimepart) || 
'','' || NEW.status|| '',''||
mysequence || '','' || idticketservice2 ||'','' ||
quote_literal(ticketnumberid2) ||'')'';
                        END IF;

                        IF idticket3 IS NOT NULL THEN
                                EXECUTE ''insert into participation''
                                        || ''(ani, dnis, fk_id_participation, 
fk_id_ticket, fk_id_service,
datetimepart, status, ticketsequence, fk_id_ticketservice, ticketnumberid)''
                                        || '' values( '' || 
quote_literal(NEW.ani) || '','' ||
quote_literal(NEW.dnis) || '',''
                                        || NEW.fk_id_participation || '',''|| 
idticket3 || '','' ||
quote_literal(NEW.fk_id_service) || '',''
                                        || quote_literal(NEW.datetimepart) || 
'','' || NEW.status || '',''||
mysequence || '','' || idticketservice3 ||'','' ||
quote_literal(ticketnumberid3) ||'')'';
                        END IF;

                        IF idticket4 IS NOT NULL THEN
                                EXECUTE ''insert into participation''
                                        || ''(ani, dnis, fk_id_participation, 
fk_id_ticket, fk_id_service,
datetimepart, status, ticketsequence, fk_id_ticketservice, ticketnumberid)''
                                        || '' values( '' || 
quote_literal(NEW.ani) || '','' ||
quote_literal(NEW.dnis) || '',''
                                        || NEW.fk_id_participation || '',''|| 
idticket4 || '','' ||
quote_literal(NEW.fk_id_service) || '',''
                                        || quote_literal(NEW.datetimepart) || 
'','' || NEW.status || '',''||
mysequence || '','' || idticketservice4 ||'','' ||
quote_literal(ticketnumberid4) ||'')'';
                        END IF;


                        EXECUTE ''update pg_class set reltriggers = count(*) 
from pg_trigger
where pg_class.oid=tgrelid and relname = '' || quote_literal(tablename);

                END IF;
        END IF;

        RETURN NULL;
END;
'
  LANGUAGE 'plpgsql' VOLATILE;


---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org

Reply via email to