![image](https://habrastorage.org/getpro/habr/post_images/191/10a/e30/19110ae30d1638d60a3fc2213f4134cf.gif)
Теперь рассмотрим пример аудита данной базы. Нас интересует: кто, когда и что сделал с таблицей. Какую запись (читай «объект») добавил, какую удалил, какую изменил, чтобы в дальнейшем не было различных «недоразумений».
Первое, что сделаем, создадим копии уже имеющихся таблиц с пространственными объектами и назовем их другими именами. Даже не саму таблицу, а ее структуру. Например:
CREATE TABLE audit_building AS SELECT * FROM building1;
Далее добавляем в таблицы для аудита новые колонки:
ALTER TABLE audit_building ADD COLUMN operation char(1); -- будет показывать, какое действие проводилось над объектом
ALTER TABLE audit_building ADD COLUMN stamp timestamp; -- время совершения действия
ALTER TABLE audit_building ADD COLUMN userid text; -- и кто этим занимался
После этого создаем триггер, который и будет отслеживать все изменения:
CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $audit_building$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO audit_building SELECT 'D', now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO audit_building SELECT 'U', now(), user, NEW.*;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO audit_building SELECT 'I', now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL;
END;
$audit_building$ LANGUAGE plpgsql;
CREATE TRIGGER audit_building
AFTER INSERT OR UPDATE OR DELETE ON building1 FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
Осталось только пользователям назначить право на создание записей в таблицу аудита:
GRANT SELECT ON audit_building TO user2;
И можно проверять!
Вот что получилось после некоторых манипуляций со слоем:
![](https://habrastorage.org/storage2/478/23a/121/47823a1213743a17937e3756a801f7de.png)
Здесь мы видим, что пользователь user2 создал 3 новых объекта (I), изменил (U) и удалил (D) один объект. Колонки из таблицы со слоем карты нужны для того, чтобы помотреть, какие именно объекты правил пользователь. Для этого можно использовать поле уникального индентификатора.
Вот и все! Теперь мы установили контроль за всеми изменениями, сделанными в таблицах.