so what's the problem exactly?? what's holding you from adding the primary key over fluid_id ?? in the trigger, you could use an if exists to check if the row is there beforeand i guess there is no need for a loop? you can do the same per row. On 11/12/05, Bob Pawley <rjpawley@xxxxxxx> wrote:>> I have the following expression working in that the process.fluid_id is> transfereed to pipe.fluid_id when the column - process.contain has a value> of 'ip'.> There is no transfer when the contain column holds other values. Success -> so far.>> How do I keep the table pipe from being populated with duplicate rows? Among> other reasons not to have duplicate rows, I want to make pipe.fluid_id a> primary key.>> Bob>> CREATE TABLE pipe ( fluid_id int4 NOT NULL);> CREATE TABLE process( fluid_id int4 NOT NULL, process varchar, contain> varchar) ;>> create or replace function base() returns trigger as $$> DECLARE> myrow RECORD;> BEGIN>> for myrow in select * from process where contain = 'ip' loop> insert into pipe(fluid_id) values (myrow.fluid_id);> if not found then> do nothing ;>> end if;> end loop;> return NULL;> END;> $$ language plpgsql;>> create trigger trig1 after insert on process> for each row execute procedure base();>> insert into process (fluid_id, process, contain)> values ('1', 'water3', 'ip');>>>>> ---------------------------(end of broadcast)---------------------------TIP 2: Don't 'kill -9' the postmaster