我希望使用
postgres_fdw
在我的数据库中设置一个FOREIGN TABLE
。是否可以在本地服务器上为此FOREIGN TABLE
定义一个触发器,以识别远程服务器上的INSERT
事件?如果可以,请提供一个示例。
数据流:
- 将数据插入到远程服务器上的表中。
- 在本地服务器的外部表上识别插入并触发触发器。
- 触发器函数将数据写入其他表中。
- 在成功写入后,返回到外部表
没有报告错误,但是向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();