Postgres: запуск на иностранном столе - PullRequest
2 голосов
/ 05 июня 2019

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