我正在尝试在法兰克福托管的 Postgres RDS 数据库中创建一个触发器,我们将其称为“法兰克福”。该触发器将轮询位于首尔的远程 Postgres RDS 数据库中的表,我们称该数据库为“首尔”。
首尔数据库永远不会删除或更新。它只会有插入。
该触发器的目的是为首尔数据库中的每个插入将不在法兰克福的行从首尔复制到法兰克福数据库。
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();
我不确定这是否是最好的方法。
我认为这不是一个好主意,您应该阅读有关Streaming Synchronous Replication的文档,它可以保证一致性并且更容易配置。
即使你不打算使用它,你也应该考虑
postgres_fdw
而不是旧的 dblink。