Re: plperl %_SHARED and rollbacks

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: Kenneth Downs <ken(at)secdat(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: plperl %_SHARED and rollbacks
Date: 2006-03-08 21:14:28
Message-ID: 20060308211428.GA56906@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, Mar 08, 2006 at 09:06:36AM -0500, Kenneth Downs wrote:
> If there are triggers writing to %_SHARED within a transaction, and the
> transaction is rolled back, do the changes to %_SHARED roll back also?

What happened when you tried it?

CREATE TABLE foo (id integer, t text, last_t text);

CREATE FUNCTION trigfunc() RETURNS trigger AS $$
$_TD->{new}{last_t} = $_SHARED{last_t};
$_SHARED{last_t} = $_TD->{new}{t};
return "MODIFY";
$$ LANGUAGE plperl;

CREATE TRIGGER footrig BEFORE INSERT OR UPDATE ON foo
FOR EACH ROW EXECUTE PROCEDURE trigfunc();

INSERT INTO foo (id, t) VALUES (1, 'one');
INSERT INTO foo (id, t) VALUES (2, 'two');
BEGIN; INSERT INTO foo (id, t) VALUES (3, 'three'); ROLLBACK;
INSERT INTO foo (id, t) VALUES (4, 'four');

SELECT * FROM foo;
id | t | last_t
----+------+--------
1 | one |
2 | two | one
4 | four | three
(3 rows)

Notice that the value assigned in the rolled back transaction was
used in the subsequent insert.

> If not then I assume I should manually clear it at the start of
> transactions, no?

Apparently so.

--
Michael Fuhr

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2006-03-08 21:19:42 Re: pg_dump error - filesystem full
Previous Message Moises Alberto Lindo Gutarra 2006-03-08 21:10:16 Re: Out of memory error on pg_restore