Всех приветствую!
Ситуация такая. Имеется сервер postgresql 9.4.1 с разрекламированной возможностью использования триггеров на внешних таблицах.
Я попробовал этим воспользоваться. На сервере есть две базы (условно назовем newdb и olddb), одна подключена к другой через postgres_fdw вот так:
CREATE SERVER fo
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '127.0.0.1',port '5432',dbname 'olddb');
ALTER SERVER fo
OWNER TO mainuser;
GRANT USAGE ON FOREIGN SERVER dev TO mainuser;
Сделан маппинг пользователю mainuser:
CREATE USER MAPPING
FOR mainuser
SERVER fo
OPTIONS (user 'mainuser',password '12345');
Далее сделана внешняя таблица примерно вот так:
CREATE FOREIGN TABLE userdata
(rowid integer ,
username character varying(255) NOT NULL,
password character varying(255) NOT NULL,
type character varying(255) NOT NULL
SERVER fo
OPTIONS (table_name 'userdata');
ALTER FOREIGN TABLE userdata
OWNER TO mainuser;
На эту внешнюю таблицу сделана триггерная функция и триггер:
CREATE OR REPLACE FUNCTION trtestfunction()
RETURNS trigger AS
$BODY$
BEGIN
-- RAISE NOTICE 'testme ';
INSERT INTO newuserdata(uname, pass) VALUES(NEW.username, NEW.password);
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION trtestfunction()
OWNER TO mainuser;
CREATE TRIGGER trtest
AFTER INSERT
ON userdata
FOR EACH ROW
EXECUTE PROCEDURE trtestfunction();
Данная конструкция не работает, хотя данные во внешней таблице обновляются моментально. В чем может быть проблема?