Como registrar as mudanças de dados da tabela PostgreSQL no syslog?

1

Eu tenho um programa que usa essas tabelas, e eu quero adicionar algumas funcionalidades adicionais ao seu registro sem modificar o programa.

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

Eu quero escrever no syslog6 uma mensagem "user123 added to group456" ou "user123 removed from group456" toda vez que um usuário for adicionado ou removido de um grupo.

Minha primeira ideia foi usar os gatilhos do 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();

A minha abordagem é boa? Se sim, como posso escrever no syslog desta função?

Eu uso o postgresql 9.2 com o CentOS 7, que usa o rsyslog.

    
por BlackCat 08.08.2016 / 10:36

2 respostas

0

Se você tiver o log configurado corretamente (consulte a opção 18.8.2. When To Log. PostgreSQL: Documentação: 9.1: Relatório e registro de erros | postgresql.org ) e seu destino de log é syslog, você pode usar RAISE para registrar algo. Mais informações podem ser encontradas aqui: PostgreSQL: Documentation: 8.3: Errors and Messages | postgresql.org

    
por 08.08.2016 / 15:42
0

Para meu conhecimento, não há uma maneira direta de gerar mensagens syslog de gatilhos, mas você poderia pensar em programas externos para essa tarefa. mas veja: Chamando o programa externo do acionador do PostgreSQL se você pensar em programas externos dentro desencadear. Haveria uma opção se você inserir mensagens em uma tabela de auditoria dentro de seu banco de dados e criar uma tarefa extra (polling :-( para verificar eventos como "adicionando ou removendo usuário".

    
por 08.08.2016 / 14:51