2016-08-26 1 views
3

Ich bin dabei, ein Audit-System in meiner Datenbank zu implementieren und bin auf der Suche nach dem effektivsten Weg, dies zu tun.PostgreSql Ereignis-Trigger für die Überwachung

Ich habe das Wiki gelesen und recherchiert.

Es ist dieses Beispiel: https://wiki.postgresql.org/wiki/Audit_trigger Und auch dies: https://wiki.postgresql.org/wiki/Audit_trigger_91plus

In den aufgeführten Beispielen Sie für jede Tabelle einen Trigger erstellen haben (ein bisschen redudant).

Wie auch immer, mit Postgres 9.3+ haben wir die Möglichkeit von Ereignisauslösern, wo wir auf spezielle Ereignisse wie Erstellen, Ändern oder Löschen von Tabellen reagieren können.

Eine wäre die optimale Lösung sein:

create event trigger UpdateTables 
    on ddl_command_end 
    when tag in ('insert ', 'update ') 
    execute procedure DoAudit(); 

jedoch die zurückgibt:

ERROR: filter value "insert " not recognized for filter variable "tag" SQL Status:42601

Ich frage mich, ob wir auch, auf Einsatz reagieren Update Ereignisse mit Ereignis-Triggern und Verwendung dieser einzelne Auslöser für alle Auditing?

+1

Sie müssen in der Tat einen Trigger für jede Tabelle erstellen, aber alle Trigger können denselben Trigger _function_ (wieder) verwenden. –

Antwort

1

Dies wird nicht funktionieren.

Die „auf ddl _command_end“ bedeutet, dass das Ereignis auf Struktur Änderungen in der Datenbank aufgerufen werden soll. Die komplette Referenz an Veranstaltungen ist hier: https://www.postgresql.org/docs/current/static/event-trigger-matrix.html

+0

Diese Liste ist in der Tat hilfreich. Hoffentlich wird es in der Zukunft zusätzliche Funktionalität geben, die zu Ereignisauslösern hinzugefügt wird, damit wir ein nettes Audit-System haben können. – Thomas

1

Werfen Sie einen Blick auf diese:

https://eager.io/blog/audit-postgres/

Dies ist eine recht einfache, aber effektive Art und Weise, ein Revisionssystem zu implementieren, die Verwendung des hstore Datentyp machen . Ich habe es kürzlich ausprobiert und es funktionierte einwandfrei "out of the box".

+0

Danke, ich sehe es mir an. – Thomas

Verwandte Themen