On Fri, Jul 08, 2005 at 12:26:30AM +0200, PFC wrote:
> 
> >That's a different issue than whether currval() is subject to
> >interference from other transactions.  And just wait until PostgreSQL
> >8.1 comes out and people start using lastval() -- then it could get
> >*really* confusing which sequence value you're getting.
> 
> What happens if an INSERT trigger inserts something into another 
> table  which also has a sequence ?

Do you mean with lastval()?  Here's what happens:

CREATE FUNCTION trigfunc() RETURNS trigger AS $$
BEGIN
    INSERT INTO bar (x) VALUES (NEW.x);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE;

CREATE TABLE foo (id serial PRIMARY KEY, x integer);
CREATE TABLE bar (id serial PRIMARY KEY, x integer);

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

ALTER SEQUENCE bar_id_seq RESTART WITH 50;

INSERT INTO foo (x) VALUES (12345);

SELECT lastval();
 lastval 
---------
      50
(1 row)

SELECT * FROM foo;
 id |   x   
----+-------
  1 | 12345
(1 row)

SELECT * FROM bar;
 id |   x   
----+-------
 50 | 12345
(1 row)

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to