Re: Old/New - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Old/New
Date
Msg-id 4B5A0BE7.50507@gmail.com
Whole thread Raw
In response to Re: Old/New  ("Bob Pawley" <rjpawley@shaw.ca>)
List pgsql-general
On 01/22/2010 11:20 AM, Bob Pawley wrote:
> I haven't found any documentation on how the underlying structure of
> PostgreSQL actually operates. So I have had to extrapolate.
>
> I think what you are saying is that on an update of a field the whole
> row which includes that field is affected to the extent that the whole
> row falls under the rules of New/Old.
>
> Is that a fair statement?

Maybe an example is in order.

Existing row
id  desc  pump1
1   test  f

UPDATE foo set pump1 ='t';

OLD row
id  desc  pump1
1   test  f

NEW row
id  desc  pump1
1   test  t


At the point the AFTER UPDATE trigger is fired it has access to both the
OLD and NEW rows via the OLD.* and NEW.* variables per Toms explanation.

>
> However the present problem is that I get two or multiple rows returned
> when I update the pump1 field to 'True' - even when there is only a
> single row in the table.
>
> The complete After Update trigger follows -
>
> Begin
>
> If new.pump1 = 'True'
>
> then
>
> Insert into p_id.devices (p_id_id, process_id, fluid_id, status,
> process_graphics_id, device_description)
> values (new.p_id_id, new.process_id, new.fluid_id, 'Pump #1', '11',
> 'Pump');
>
> End if;
>
> If new.pump2 = 'True'
>
> then
>
> Insert into p_id.devices (p_id_id, process_id, fluid_id, status,
> process_graphics_id, device_description)
> values (new.p_id_id, new.process_id, new.fluid_id, 'Pump #2', '11',
> 'Pump');
>
> End if ;
>
> RETURN NULL;
>
> END;
>
> Bob
>
>

This is different from what you originally posted. Is the above still
causing problems?

--
Adrian Klaver
adrian.klaver@gmail.com

pgsql-general by date:

Previous
From: Larry Rosenman
Date:
Subject: Re: When is the release date for Postgres 8.5?
Next
From: "Bob Pawley"
Date:
Subject: Re: Old/New