2017-12-05 44 views
0

トリガを作成しました。行を更新すると、前にトリガーが動作しません。後で、2回目の行を更新すると、トリガーが機能しています。なぜ前に動かないの?それはないどのようにそれがどのように動作するかと -PostgreSQLはトリガによって最後に更新された行を更新しません

CREATE TRIGGER trg_update_em_z_module_mod_codes 
    before UPDATE 
ON emlakmuayene.em_z_module 
FOR EACH ROW 
    EXECUTE PROCEDURE emlakmuayene.update_em_z_module_mod_codes(); 

CREATE OR REPLACE FUNCTION emlakmuayene.update_em_z_module_mod_codes() 
    RETURNS trigger AS 
$BODY$ 
    BEGIN 
     if (TG_OP = 'UPDATE') then 
     if new.mod_codes_ids is not null then  
     new.mod_codes= 
     (
     SELECT translate(array_Agg(pages)::Text,'{}','') as mod_codes 
     FROM emlakmuayene.em_z_module t1 
     join emlakmuayene.em_z_order_pages_view t2 
     on t2.id_seq_x = any (('{'||t1.mod_codes_ids||'}')::bigint[]) where t1.id_Seq_X=new.id_seq_x group by t1.id_Seq_X);   
     end if ; 
     end if; 
    RETURN new; 
    END;  
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
+1

は、いくつかのコードを表示してください

を働いています –

答えて

0

私のトリガーを追加した後IF pg_trigger_depth() <> 1 THEN RETURN NEW; と私の 更新SQL update emlakmuayene.em_z_module t1 set mod_codes = t2.mod_codes ,reg=1 from ( SELECT t1.id_Seq_x ,translate(array_Agg(pages)::Text,'{}','') as mod_codes FROM emlakmuayene.em_z_module t1 join emlakmuayene.em_z_order_pages_view t2 on t2.id_seq_x = any (('{'||t1.mod_codes_ids||'}')::bigint[]) where t1.id_seq_x=new.id_seq_x group by t1.id_Seq_X ) t2 where t1.id_seq_x=T2.id_seq_x;を変更するには、その後、私のトリガー CREATE OR REPLACE FUNCTION emlakmuayene.update_em_z_module_mod_codes() RETURNS trigger AS $BODY$ BEGIN
IF pg_trigger_depth() <> 1 THEN RETURN NEW; END IF; update emlakmuayene.em_z_module t1 set mod_codes = t2.mod_codes ,reg=1 from ( SELECT t1.id_Seq_x ,translate(array_Agg(pages)::Text,'{}','') as mod_codes FROM emlakmuayene.em_z_module t1 join emlakmuayene.em_z_order_pages_view t2 on t2.id_seq_x = any (('{'||t1.mod_codes_ids||'}')::bigint[]) where t1.id_seq_x=new.id_seq_x group by t1.id_Seq_X ) t2 where t1.id_seq_x=T2.id_seq_x; return new; END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION emlakmuayene.update_em_z_module_mod_codes() OWNER TO tuvimer_ortak

関連する問題