Триггер на postgres_fdw foreign table не работает

djpeter
Дата: 30.03.2015 09:27:51
Всех приветствую!

Ситуация такая. Имеется сервер 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();


Данная конструкция не работает, хотя данные во внешней таблице обновляются моментально. В чем может быть проблема?
стесняюсь спросить
Дата: 30.03.2015 10:05:40
djpeter,
стесняюсь спросить, события какой из 2-х БД вы полагаете должны обрабатываться в триггере, созданном в newdb ?
и, опять же стесняюсь спросить, события какой из 2- ДБ у вас "не бобрабатываюцца"
djpeter
Дата: 30.03.2015 10:08:35
Триггер создан на внешней таблице в newdb. Событие должно обрабатываться на ней.
Согласно вот этому примеру http://michael.otacoo.com/postgresql-2/postgres-9-4-feature-highlight-trigger-foreign-tables/, при обновлении/добавлении записи основной таблицы во внешней базе происходит то же событие в связанной таблице, являющейся foreign table. Или я чего то не понял?
стесняюсь спросить
Дата: 30.03.2015 10:46:43
djpeter
Триггер создан на внешней таблице в newdb. Событие должно обрабатываться на ней.
Согласно вот этому примеру http://michael.otacoo.com/postgresql-2/postgres-9-4-feature-highlight-trigger-foreign-tables/, при обновлении/добавлении записи основной таблицы во внешней базе происходит то же событие в связанной таблице, являющейся foreign table. Или я чего то не понял?
с каких уёв ?

там же битым текстом написано

автор
each time a DML occurs on the foreign table
т.е. в fdw 9.4. добавлена

1. обновляемость fwd dml-Ем со стороны подключения
2. обработка событий dml [возбуждаемых и происходящих] на стороне подключения

3. события данных, как таковых, по прежнему могут возникать только на стороне реального их размещение -- в ДБ old


лично я так думаю
стесняюсь спросить
Дата: 30.03.2015 10:59:57
хотя, даже если не смотерть на бложег какого-то пдрса, а в реальную доку
http://www.postgresql.org/docs/9.4/static/trigger-definition.html

--там как всегда в пж создана видимость документации -- нагребли слова в кучку, а реально по факту никуа не описали, гнойные альтернативно ориентированный гондурасты, зла не хватает.