当另一个表已插入多行时在Postgres表中插入数据

问题描述:

我是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(); 

必须省略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