Здравствуйте уважаемые форумчане.
Работаю в связке Postgresql+Postgis+Qgis. Postgis - есть расширение для Postgresql, для работы с пространственными данными. Qgis собственно сам клиент через который подключаюсь к БД.
Создал пользователей, разграничил права. Все работает на ура. Разумеется надо немного подпилить PostgreSQl.
А именно. Как оказалось очень важно знать кто какие изменения вносил. То есть протоколировать изменения в БД, в частности иметь информацию о том кто какие изменения вносил в таблицы БД. Есть ли возможность реализации данной функции в PostgreSQL.
Вы можете включить подробный
Вы можете включить подробный лог, тогда и запросы и те кто их вносил должны попадать в лог. Больше, увы никак это не реализовать. Нет, конечно, никто не мешает вам написать например хранимые процедуры, которые будут добавлять запись в таблицу-лог и менять нужные вам данные, но штатных средств для этого нет.
Извините. А Вы не подскажите
Извините. А Вы не подскажите как?
День добрый А именно. Как
День добрый
А именно. Как оказалось очень важно знать кто какие изменения вносил. То есть протоколировать изменения в БД, в частности иметь информацию о том кто какие изменения вносил в таблицы БД. Есть ли возможность реализации данной функции в PostgreSQL.
Это называется аудитом. Сделайте таблицу куда будете складывать действия пользователей; сделайте сохраняемые процедуры для insert, update, delete(называет, например, log_insert и т.д.). В процедуре для определения имени пользователя, используйте фунцию - "select session_user;", а для определения ip-адреса с которого используйте функцию - "select inet_client_addr();" потом делайте тригеры(на обновление, вставку, удаление), в которых используйте созданные сохранёные процедуры. Думаю ничего сложного нет, а как получить имя пользователя и его апишник я написал. Как создавать тригеры - в мануалах написано.
Нашел что то схожее с моей
Нашел что то схожее с моей проблемой.. буду пробовать.
С аудитом вроде разобрался..
С аудитом вроде разобрался.. Данная статья помогла.
Помогите пожалуйста для таблицы следующего вида.
Как для данной таблицы сделать так чтоб при внесении изменений в нее же ( то есть не в аудитную таблицу) сохранялись время создания, юзер вносивший изменения. Целый день старался написать тригер осуществляющий такое, что то не получилось. (
Прошу направить на верную мысль и если можно хотя бы приближенный пример реализации.
Ладно друзья, объясню
Ладно друзья, объясню поподробнее. Имеется следующее представление
Которое выдает таблицу следующего вида
http://fotki.yandex.ru/users/alimuradov05/view/1008572/
В результирующей таблице данного представления мы видим username name, usesysid id значения времени и т.д.
Раз представления их выводит значит эти значения где то хранятся..
Вопрос где??
Другой вопрос как так же реализовать у себя в таблице.
Подскажите новичку. Документацию изучать уже начал, но не хотелось бы чтоб работа стояла из за моей необразованности.
Еще раз но уже по другому..
Есть таблиц.
сделал тригер на вставку
однако при добавлении объекта выдается ошибка:
Ошибки источника:
Ошибка PostGIS при добавлении объектов: ERROR: stack depth limit exceeded
HINT: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
CONTEXT: SQL statement "INSERT INTO note
(id, geom, note, remark, created, created_by)
VALUES
(NEW.id, NEW.geom, NEW.note, NEW.remark,
current_timestamp, current_user)"
PL/pgSQL function note_insert() line 3 at SQL statement
SQL statement "INSERT INTO note
(id, geom, note, remark, created, created_by)
VALUES
(NEW.id, NEW.geom, NEW.note, NEW.remark,
current_timestamp, current_user)"
но почему то
Триггер делайте на Before,
Триггер делайте на Before, тогда ошибки не будет.