当另一个表已插入多行时在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;
感谢它的工作原理。所以早些时候,就像为每一行插入整个表格一样。它现在有道理。 – MoChen