2016-08-06 6 views
0

Hallo Ich habe eine Registra_cambios() -Funktion; die ich allen Tabellen in meiner Datenbank zuweisen möchte, frage ich mich, ob Sie den Auslösenamen mit dem Datensatz (Tabellenname) verknüpfen können, damit der Cursor nicht den gleichen Triggernamen für alle Tabellen hatTrigger Name dynamisch zuweisen postgresql

Triggerbeispiel erstellen t_log_ "record"()

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

Verwendung 'execute' für dynamische sQL- –

+0

Eigentlich auslöst, ist ein Tabellen-Eigenschaft, so dass ihre Namen sollten durch eindeutige nur für den gleichen Tisch, nicht um das Schema /Datenbank. – Abelisto

+0

@Abelisto wenn ich den Namen dynamisch erstellen möchte, t_log_ name + nametable –

Antwort

0

soemthing wie? ..

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

Ich glaube, ';' Semikolon war ein Problem - ich kopierte Ihre Aussage - sollte es zuerst bearbeiten –

+0

BTW würde ich empfehlen Sie mit 'Limit 2' für Anfang. um zu vermeiden, Trigger für viele Tabellen zu erstellen, bevor Sie sicher sind, dass Sie es wollen –

+0

eine andere Blindkopie einfügen - Sie verwenden "Tab" als Alias ​​für Tabellenname. änderte den Code ... –

Verwandte Themen