Re: Rows are repeating by the trigger function
От | Alban Hertroys |
---|---|
Тема | Re: Rows are repeating by the trigger function |
Дата | |
Msg-id | F8E942E8-E8DD-4610-975E-D5AF9228CED5@gmail.com обсуждение исходный текст |
Ответ на | Rows are repeating by the trigger function (Kiran <bangalore.kiran@gmail.com>) |
Ответы |
Re: Rows are repeating by the trigger function
|
Список | pgsql-general |
> On 30 Oct 2016, at 10:31, Kiran <bangalore.kiran@gmail.com> wrote: > > Dear Folks, > > I have a table cf_question with 31 rows. > I want to insert/update another table cf_user_question_link when cf_question table is inserted/updated with row(s). > I have written trigger function for this as follows. > > > CREATE FUNCTION user_question_link() RETURNS trigger AS > $user_question_link$ > begin > SET search_path TO monolith; > INSERT INTO > cf_user_question_link(cf_user_id,cf_question_id) > VALUES(NEW.user_id,NEW.cf_question_id); > RETURN NEW; > end; > $user_question_link$ > LANGUAGE plpgsql > COST 100; > > > /* Call the trigger function */ > > CREATE TRIGGER insert_user_question_link AFTER INSERT OR UPDATE > ON monolith.cf_question > FOR EACH ROW EXECUTE PROCEDURE user_question_link(); > > > Problem: The cf_user_question_link gets inserted with 94 rows instead of 31 rows. The 31 rows are repeated 3 times > I tried dropping the trigger function and recreating it but with the same 94 rows in the table. > > It would be great if any from the forum point to me where I am doing wrong. I don't think you want that same trigger to fire on UPDATE of cf_question, like you do now. On UPDATE you have two choices; - either you need to take changes to those _id columns into account and delete rows that belong to the OLD link and not tothe NEW one (or do nothing if those stayed the same) - or you do nothing (no trigger needed) because in the majority of cases changing FK's is limited to a few power users atbest and they're supposed to know what they're doing. Alban Hertroys -- If you can't see the forest for the trees, cut the trees and you'll find there is no forest.
В списке pgsql-general по дате отправления: