Estou tentando criar um gatilho dentro de um banco de dados Postgres RDS hospedado em Frankfurt que chamaremos de "Frankfurt". Esse gatilho pesquisará tabelas em um banco de dados Postgres RDS distante hospedado em Seul, vamos chamar esse banco de dados de "Seoul".
O banco de dados de Seul nunca terá exclusão nem atualização. Terá apenas inserção.
O objetivo desse gatilho é que cada inserção no banco de dados de Seul copie as linhas de Seul que não estão em Frankfurt para o banco de dados de Frankfurt.
CREATE OR REPLACE FUNCTION my_dml_function() RETURNS TRIGGER AS $employees$
BEGIN
--
--
IF (TG_OP = 'INSERT') THEN
perform dblink_connect('dbname=database_seoul user=postgres password=ExtraPassword');
INSERT INTO all_employees
SELECT *
FROM dblink('foreign_server',$RDS$
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT employee_id FROM all_employees)
$RDS$) AS t1;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$emp_audit$ LANGUAGE plpgsql;
CREATE TRIGGER my_dml_trigger
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW EXECUTE PROCEDURE my_dml_function();
Não tenho certeza se é a melhor maneira.
Eu não acho que isso seja uma boa ideia, você deve ler a documentação sobre Replicação Síncrona de Streaming , que garante consistência e é muito mais fácil de configurar.
Mesmo se você não for usar isso, considere
postgres_fdw
em vez do dblink mais antigo.