2017-09-16 16 views
0

Postgresを初めて使用しています。私の問題は、新しいテーブルの新しい行を「ターゲットテーブル」に挿入したい場合です。新しい行が「ソーステーブル」に挿入されています。 正確にそれを行うためのトリガーを書いたが、ソースが例えばの新しい行で挿入されると、トリガーは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; 

そして、私のトリガーは、あなたがFROMを省略しなければなりません

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

答えて

0

です。多くの行が挿入されている(テーブルの前の状態で各行に1つずつ)理由があります。

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

関連する問題