Thread: triggers, transactions and locks

triggers, transactions and locks

From
"C G"
Date:
Dear All,

Is there a way to use locks within a trigger? My example below gives the
error:
ERROR:  unexpected error -8 in EXECUTE of query "BEGIN"
CONTEXT:  PL/pgSQL function "insert_into_t1" line 6 at execute statement

Thanks

Colin


CREATE FUNCTION insert_into_t1() RETURNS trigger AS'
        DECLARE
                set_qry text;
        BEGIN

                set_qry:=''BEGIN WORK'';
                execute set_qry;
                LOCK t1;
                INSERT INTO t2 VALUES (11);
                COMMIT;
                RETURN NEW;
        END;
' LANGUAGE 'plpgsql' SECURITY DEFINER;

CREATE TRIGGER insert_into_t1 BEFORE INSERT
        ON t1 FOR EACH ROW EXECUTE
                PROCEDURE insert_into_t1();



Re: triggers, transactions and locks

From
Stephan Szabo
Date:
On Mon, 6 Dec 2004, C G wrote:

> Is there a way to use locks within a trigger? My example below gives the
> error:

It's not the lock that's the problem I think. The begin work is failing
because you can't start a transaction inside the function. Were you trying
to release the lock at the commit in the function?

> CREATE FUNCTION insert_into_t1() RETURNS trigger AS'
>         DECLARE
>                 set_qry text;
>         BEGIN
>
>                 set_qry:=''BEGIN WORK'';
>                 execute set_qry;
>                 LOCK t1;
>                 INSERT INTO t2 VALUES (11);
>                 COMMIT;
>                 RETURN NEW;
>         END;
> ' LANGUAGE 'plpgsql' SECURITY DEFINER;

Re: triggers, transactions and locks

From
"C G"
Date:

> > Is there a way to use locks within a trigger? My example below gives the
> > error:
>
>It's not the lock that's the problem I think. The begin work is failing
>because you can't start a transaction inside the function. Were you trying
>to release the lock at the commit in the function?
Yes I was using the commit to release the lock.