Ser Programador

Passando parâmetros para triggers no PostgreSQL

Entendendo como passar parâmetros para dentro das triggers.


Olá, pessoal!

Se você ainda não sabe como as triggers são construídas, dê um pulo rápido AQUI.

É possível passarmos parâmetros de nossa preferência para as triggers trabalharem esses parâmetros em suas tomadas de decisões ou outra atitude qualquer que se deseje. Para isso utilizaremos a variável TG_ARGV que fica ativa em forma de array de dados.

Para que possamos utilizar essa variável TG_ARGV, podemos armazená-la em outras variáveis dentro da nossa procedure da trigger. Para isso usamos o declare e especificamos o nome da variável seguida do tipo.

Vejamos então um exemplo completo de como fica uma trigger genérica recebendo parâmetros para uma tomada de decisões sobre qual base de dados efetuar a replicação de um registro inserido:

        CREATE OR REPLACE FUNCTION replica_dados_usuario()
        RETURNS trigger
        AS $$
        	declare
            	base_to_exec varchar;
            begin
            	base_to_exec := TG_ARGV[0];
                if(base_to_exec = 'base1')
                	then --// CONECTA NA BASE1 E INSERE REGISTRO
                else if(base_to_exec = 'base2')
                	then --// CONECTA NA BASE2 E INSERE REGISTRO
                else if(base_to_exec = 'base3')
                	then --// CONECTA NA BASE3 E INSERE REGISTRO
                end if;
                return new;
            end;
        $$ LANGUAGE plpgsql;
        
        CREATE TRIGGER executa_replicacao_dados_usuario
        AFTER INSERT ON tb_usuarios
            FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base1');
        
        CREATE TRIGGER executa_replicacao_dados_usuario
        AFTER INSERT ON tb_logins
            FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base2');
        
        CREATE TRIGGER executa_replicacao_dados_usuario
        AFTER INSERT ON tb_usuarios_cargos
            FOR EACH ROW EXECUTE PROCEDURE replica_dados_usuario('base3');
    

No exemplo acima criamos três triggers em tabelas diferentes onde, de acordo com o parâmetro, executa inserções em uma outra base de dados.



No próximo post veremos como se conectar a outras bases de dados e coletar valores ou executar processos.