2016-08-26 4 views
3

Я собираюсь внедрить систему аудита в своей базе данных, и я ищу наиболее эффективный способ сделать это.PostgreSql Событие триггера для аудита

Я читал wiki и проводил исследования.

Существует этот пример: https://wiki.postgresql.org/wiki/Audit_trigger А также это: https://wiki.postgresql.org/wiki/Audit_trigger_91plus

В перечисленных примерах вы должны создать триггер для каждой таблицы (своего рода redudant).

Однако с Postgres 9.3+ у нас есть возможность запуска событий, где мы можем реагировать на специальные события, такие как создание, изменение или удаление таблицы.

Оптимальное решение было бы:

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

Однако, возвращающий:

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

мне интересно, если мы можем реагировать на вставке, обновления событий с триггерами событий и использованием этот единственный триггер для всех аудитов?

+1

Вам действительно нужно создать триггер для каждой таблицы, но все триггеры могут (повторно) использовать один и тот же триггер _function_. –

ответ

1

Это не сработает.

«Об DDL _command_end» означает событие предназначено для вызова на структурных изменений в базе данных. Полная ссылка на события здесь: https://www.postgresql.org/docs/current/static/event-trigger-matrix.html

+0

Этот список действительно полезен. Надеюсь, в будущем в триггеры событий добавятся дополнительные функции, чтобы мы могли иметь хорошую систему аудита. – Thomas

1

Посмотрите на это:

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

Это довольно простой, но эффективный способ реализации системы аудита, используя тип данных hstore , Я недавно попробовал, и он работал безупречно «из коробки».

+0

Спасибо, я посмотрю. – Thomas

Смежные вопросы