2017-09-16 122 views
0

我是Postgres的新手。我的問題是,當這些新行插入「源表」中時,我想在「目標表」中插入一些新行。 我寫了一個觸發器來做到這一點,但每當源插入與說7個新行然後觸發器插入7x7 = 49行在目標中。接下來,如果我在源中插入另外3個新行,那麼目標將變爲49 + 3x10 = 79。 我在做什麼錯誤.. ??當另一個表已插入多行時在Postgres表中插入數據

觸發功能:

CREATE OR REPLACE FUNCTION public.rec_insert() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
INSERT INTO target_table ("TIME","REGION","CITY","DISTRICT","Population") 
SELECT NEW."TIME",NEW."REGION",NEW."CITY",NEW."DISTRICT",(100*(NEW."SAMPLES_MALE_Available")/(NULLIF((NEW."Total_AVAIL"-NEW."Female_AVAIL"),0))) 
FROM source_table; 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 

我的觸發是

CREATE TRIGGER ins_same_rec 
AFTER UPDATE 
ON source_table 
FOR EACH ROW 
EXECUTE PROCEDURE rec_insert(); 

回答

0

必須省略FROM。這就是因爲插入了許多行的原因(表中的前一狀態中的每行一個)

CREATE OR REPLACE FUNCTION public.rec_insert() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
INSERT INTO target_table ("TIME","REGION","CITY","DISTRICT","Population") 
SELECT NEW."TIME",NEW."REGION",NEW."CITY",NEW."DISTRICT",(100*(NEW."SAMPLES_MALE_Available")/(NULLIF((NEW."Total_AVAIL"-NEW."Female_AVAIL"),0))); 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 
+0

感謝它的工作原理。所以早些時候,就像爲每一行插入整個表格一樣。它現在有道理。 – MoChen

相關問題