Damit rekursive trigger in PostgreSQL

Wie Sie verhindern, dass rekursiven Ausführung der trigger? Sagen wir, ich will mit dem Bau einer "Baum-in der Lage" Beschreibung Diagramm der Konten. Also, was ich zu tun ist, wenn ein neuer Datensatz eingefügt/aktualisiert, update ich die den übergeordneten Datensatz ist down_qtyso würde das auslösen der update-trigger rekursiv.

Recht jetzt mein code ist ok - ich habe dies auf UPDATE trigger der ersten Zeile:

-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
    return new;
end if;

- Und das ist der Beispielcode aus meinem trigger, wenn ich zum aktualisieren der übergeordneten Datensatzes Menge:

update account_category set 
    track_recursive_trigger = track_recursive_trigger + 1, -- i put this line to prevent recursive trigger
    down_qty = down_qty - (old.down_qty + 1)
where account_category_id = m_parent_account;

Ich denke, wenn es einen Weg gibt in PostgreSQL zu erkennen rekursive auslösen, ohne dass ein neues Feld, etwas analoges zu MSSQL ist trigger_nestlevel.

[BEARBEITEN]

Ich Schleife innerhalb der Struktur, ich muss sprudeln die down_qty jeder account_category zurück zu seiner Wurzel. Ich zum Beispiel legen Sie ein neues Konto, Kategorie, braucht es zur Erhöhung des down_qty des übergeordneten account_categoryebenso, wenn ich das Konto ändern, Kategorie Muttergesellschaft account_category muss ich Dekrementieren down_qty von account_category's früheren übergeordneten account_category. Obwohl ich denke, es kann, ich bin nicht lassen, PostgreSQL tun die rekursive trigger. Ich verwendet, MSSQL, vor denen die trigger-rekursive Tiefe Ebene ist begrenzt nur bis zu 16 Ebenen.

InformationsquelleAutor der Frage Hao | 2009-04-02

Schreibe einen Kommentar