Re: Inserting Data

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Bob Pawley <rjpawley(at)shaw(dot)ca>
Cc: Michael Fuhr <mike(at)fuhr(dot)org>, Postgresql <pgsql-general(at)postgresql(dot)org>
Subject: Re: Inserting Data
Date: 2006-08-23 22:18:21
Message-ID: 25094.1156371501@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Bob Pawley <rjpawley(at)shaw(dot)ca> writes:
> Perhaps we can look at the following as a simple example of what is
> happening-

> ---------
> create or replace function loop_association() returns trigger as $$
> begin

> Insert Into p_id.loops (monitor)
> select new.devices_id
> from p_id.devices ;

> return null ;
> end ;
> $$ language plpgsql ;

> create trigger loop after insert on p_id.devices
> for each row execute procedure loop_association();
> ------

> This trigger and procedure gives a single row on the first insert on an
> otherwise blank table. However it produces two identical rows of the second
> device_id on the second insert and three identical rows of the third
> device_id on the third insert. (This is the only trigger on the table)

Well, of course, because that's an unqualified "select", so each call
will copy *all* of p_id.devices into p_id.loops. Methinks what you
really want is to insert the NEW row, not the whole table.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Bob Pawley 2006-08-23 22:27:25 Re: Inserting Data
Previous Message Tom Lane 2006-08-23 22:15:23 Re: CASCADING could not open relation with OID