2016-08-06 69 views
0

嗨,我有一個Registra_cambios()函數;想要分配給我的數據庫中的所有表,我想知道是否可以連接觸發器名稱與記錄(表名)我的光標不具有相同的觸發器名稱在所有表上動態分配觸發器名稱postgresql

創建觸發器示例t_log_「記錄」 ()

CREATE OR REPLACE FUNCTION ActiveTriggers() returns void as $$ 
DECLARE 

r record; 
c CURSOR FOR SELECT table_name as tab FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'; 


BEGIN 

    FOR r IN c LOOP 
     create trigger t_log_r before insert or update or delete 
     on r.tab 
     for each row 
     execute procedure Registra_cambios(); 
    END LOOP; 




END; 
$$ LANGUAGE plpgsql; 
+0

使用'execute'動態SQL –

+0

其實觸發器是一個表屬性,因此它的名稱應該由唯一隻爲同一個表,而不是相反模式/數據庫。 – Abelisto

+0

@Abelisto如果是這樣我想創建名稱動態觸發器,t_log_名稱+名稱表 –

回答

0

soemthing樣?..

do 
$$ 
declare 
    r record; 
begin 
    for r in (SELECT table_name as tab FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';) loop 
    execute 'create trigger t_log_r_'||r.tab||' before insert or update or delete 
    on '||r.tab||' 
    for each row 
    execute procedure Registra_cambios()'; 
    end loop; 
end; 
$$ 
; 
+0

我相信';'分號是個問題 - 我拷貝了你的語句 - 應該先編輯它 –

+0

btw我會推薦你​​使用'limit 2'開始。以避免在確定需要之前爲大量表創建觸發器 –

+0

另一個盲複製粘貼 - 您使用「tab」作爲table_name的別名。更改了代碼... –