Intereting Posts
Поиск абсолютного пути разделяемых библиотек, используемых исполняемым файлом Невозможно построить QTAV для cubieboard2 на кубине Как переопределить быстрые клавиши kde4 Как добавить несколько строк в файл с помощью bash, с символом «-» перед строкой Запрос удаленного почтового сервера POP3 с использованием BASH Интерфейс HWMon для теплового устройства I2C (TMP102, 3.10) – отсутствуют файлы sysfs Шифрование MIME RSA рекурсивный поиск имени папки и присвоение его переменной «Нет доступных пакетов вина» и «Нет доступных пакетов флюкса» Проблема с vim при входе в систему как root Vim – статусная линия и ссылки libcrypto.so.1.0.0: информация о версии отсутствует (требуется /opt/Android/Sdk/cmake/3.6.3155560/bin/cmake) Как заменить диски на существующий полосатый zpool? Возможна условная / комбинированная команда sudoers? Как найти все файлы в папке, содержащей совпадение регулярного выражения в имени файла?

Как регистрировать данные таблицы PostgreSQL в syslog?

У меня есть программа, которая использует эти таблицы, и я хочу добавить некоторые дополнительные функции для ее ведения журнала без изменения программы.

groups ------ id bigint not null name character varying(100) not null users ----- id bigint not null name character varying(100) not null users_groups ------------ group_id bigint not null user_id bigint not null 

Я хочу записать в syslog6 сообщение user123, добавленное в группу456 или сообщение user123 из группы456, каждый раз, когда пользователь добавляется или удаляется из группы.

Моя первая идея заключалась в использовании триггеров PostgreSQL.

 CREATE OR REPLACE FUNCTION process_ext_audit() RETURNS trigger AS $ext_audit$ BEGIN IF (TG_OP = 'DELETE') THEN SELECT name into uname FROM users WHERE id = OLD.user_id; SELECT name into gname FROM groups WHERE id = OLD.group_id; -- write into local6: "uname removed from gname" ELSIF (TG_OP = 'INSERT') THEN SELECT name into uname FROM users WHERE id = NEW.user_id; SELECT name into gname FROM groups WHERE id = NEW.group_id; -- write into local6: "uname added to gname" END IF; RETURN NULL; END; $ext_audit$ LANGUAGE plpgsql; CREATE TRIGGER ext_audit AFTER INSERT OR DELETE ON users_groups FOR EACH ROW EXECUTE PROCEDURE process_ext_audit(); 

Мой подход хорош? Если да, то как я могу записать в syslog из этой функции?

Я использую postgresql 9.2 с CentOS 7, который использует rsyslog.

Насколько мне известно, не существует способа генерировать сообщения syslog из триггеров, но вы можете думать о внешних программах для этой задачи. но см. https://stackoverflow.com/questions/21634848/calling-external-program-from-postgresql-trigger, если вы думаете о внешних программах внутри триггера. Был бы вариант, если вы вставляете сообщения в таблицу аудита внутри своей базы данных и создаете дополнительную задачу (опрос 🙁 для проверки таких событий, как «добавление или удаление пользователя».

Если вы правильно настроили протоколирование (см. 18.8.2. When To Log здесь регистрируетесь), а ваш журнал – это syslog, вы можете использовать RAISE для регистрации. Более подробную информацию можно найти здесь: https://www.postgresql.org/docs/8.3/static/plpgsql-errors-and-messages.html