Я хотел бы использовать 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();