Postgres:在FOREIGN TABLE上触发

时间:2019-06-05 17:49:17

标签: postgresql database-trigger postgres-fdw

我想使用postgres_fdw并在数据库中放置一个FOREIGN TABLE。是否可以为此本地FOREIGN TABLE定义一个触发器,以识别远程服务器上的INSERT事件。如果是这样,请提供示例。


数据流:

  1. 将数据插入远程服务器上的表中。
  2. 识别触发触发器的本地服务器外部表上的插入。
  3. 触发函数将数据写入其他表中。
  4. 写成功后,发回外表

想法简略图:


未报告任何错误,但对table_b的写入似乎未成功。

这是我尝试过的:

CREATE FOREIGN TABLE x.table_a   -- note the foreign table is in a different schema than the local table
( id        BIGINT           NOT NULL                   
, data_ts   TIMESTAMPTZ      DEFAULT CURRENT_TIMESTAMP
, xchg_ts   TIMESTAMPTZ      DEFAULT NULL
)
SERVER remote_server
OPTIONS (schema_name 'schema_a', table_name 'table_a')
;

CREATE TABLE y.table_b
( xchg_id    BIGINT
, error_msg  TEXT DEFAULT NULL
);

CREATE OR REPLACE FUNCTION func_foreign_table_a_after_insert()
RETURNS TRIGGER
AS $$
BEGIN
    INSERT INTO y.table_b
        (xchg_id)
    VALUES
        (NEW.id)
    ;
    RETURN NEW;
END;
$$  LANGUAGE PLPGSQL
;

CREATE TRIGGER trig_foreign_table_a_after_insert
AFTER INSERT ON x.table_a
FOR EACH ROW EXECUTE PROCEDURE func_foreign_table_a_after_insert();

0 个答案:

没有答案