2013-02-15 7 views
0

У меня есть таблица «demand_details» на обновление или удаление я хочу сохранить значения каждой строки в другой таблице «demand_details_log»PostgreSQL триггер не работает

мои функции следующим образом

CREATE OR REPLACE FUNCTION water_blogb() RETURNS trigger AS 
$BODY$ 
BEGIN 
    IF (TG_OP='UPDATE') THEN 
     INSERT INTO demand_details_log VALUES ('U',now(),OLD.*); 
     RETURN NEW; 
    END IF; 
    IF (TG_OP='DELETE') THEN 
     INSERT INTO demand_details_log VALUES ('D',now(),OLD.*); 
     RETURN OLD; 
    END IF; 
END; 
$BODY$ LANGUAGE plpgsql 

мой триггер следующим

CREATE TRIGGER water_btrg_b 
    AFTER UPDATE OR DELETE 
    ON demand_details 
    FOR EACH ROW 
    EXECUTE PROCEDURE water_blogb(); 

Моя проблема заключается в тот же триггер и функции хорошо работает на другом столе (путем изменения таблицы, триггера и имя функции) бушелей t не работает с таблицей спроса. Я попытался с «УВЕЛИЧИТЬ УВЕДОМЛЕНИЕ», работающим ... », и в другом триггере таблицы срабатывает, но в таблице спроса его не запускают вообще.

+1

Что именно означает «не работает»? –

+0

Trigger не запускается вообще, когда я обновляю или удаляю запись из demand_table –

+0

Я использую Postgresql 9.1.3 –

ответ

0

Как вы нашли, триггеры не наследуются. Это приводит к некоторым трудностям в управлении триггерами в унаследованных структурах таблиц. Возможно, вам захочется ознакомиться с некоторыми из проблем, связанных с http://ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-3-table.html и http://ledgersmbdev.blogspot.com/2012/08/or-modelling-32-setsubset-modelling.html.

Теперь эти адреса не касаются разбиения на таблицы непосредственно, что может быть тем, что вы пытаетесь сделать здесь. Я бы рекомендовал вам создать дополнительные тесты, которые вы можете запустить, чтобы проверить и убедиться, что триггеры правильно установлены во всех подтемах. Я бы предложил взглянуть на How to find inherited tables programatically in PostgreSQL?, а также на таблицу pg_trigger, чтобы вы могли создать отчет дочерних таблиц, которые не разделяют триггеры их родителей.

Смежные вопросы