在postgresql Trigger上使用动态表名

时间:2013-03-06 13:41:14

标签: postgresql

我有以下触发器,我想在多个表中使用。那么,我怎么能让它工作而不是每个表有一个触发器?

BEGIN
    IF (TG_OP = 'UPDATE') THEN
        UPDATE test_table set rel_label = (select SUBSTR(release, 1, 5)) where uid=OLD.uid;
        RETURN OLD;
    ELSIF (TG_OP = 'INSERT') THEN
        UPDATE test_table  set rel_label = (select SUBSTR(release, 1, 5)) where uid=OLD.uid;
        RETURN NEW;
    END IF;
    RETURN NULL; -- result ignored since is an AFTER TRIGGER
END;

问候。

2 个答案:

答案 0 :(得分:0)

请参阅EXECUTE命令的文档。

答案 1 :(得分:0)

刚刚想出了一个直接的解决方案。

BEGIN
    IF (TG_OP = 'INSERT') THEN
                NEW.rel_label = (select SUBSTR(NEW.release, 1, 5));
                RETURN NEW;
    ELSIF (TG_OP = 'UPDATE') THEN
                NEW.rel_label = (select SUBSTR(NEW.release, 1, 5));
                RETURN NEW;
    END IF;
            RETURN NULL;

END;