我遇到触发器问题。我创建了一个触发器和一个函数来跟踪每个用户在我的数据库中使用了多少行。触发器和函数的INSERT部分正常工作,但DELETE不执行任何操作。当我在我的应用程序中插入行时,行数会增加,当我删除时,rowcount不会更改。Postgres触发器适用于INSERT,不适用于DELETE
这里就是我把行数表:
Table "public.rowcount"
Column | Type | Modifiers
------------+---------+-----------
user__id | integer | not null
table_name | text | not null
total_rows | bigint |
这里是我的TRIGGER:
CREATE TRIGGER countrows_m_time
AFTER INSERT OR DELETE on m_time
FOR EACH ROW EXECUTE PROCEDURE count_rows_m_time();
这里是功能:
CREATE OR REPLACE FUNCTION count_rows_m_time()
RETURNS TRIGGER AS
'
BEGIN
IF TG_OP = ''INSERT'' THEN
UPDATE rowcount
SET total_rows = total_rows + 1
WHERE table_name = TG_RELNAME
AND user__id = (SELECT user__id from vi_m_time_users where m_value_id = NEW.m_value_id);
ELSIF TG_OP = ''DELETE'' THEN
UPDATE rowcount
SET total_rows = total_rows - 1
WHERE table_name = TG_RELNAME
AND user__id = (SELECT user__id from vi_m_time_users where m_value_id = OLD.m_value_id);
END IF;
RETURN NULL;
END;
' LANGUAGE plpgsql;
任何想法? 非常感谢, 牛油果
触发似乎没给我。也许问题在别的地方?我猜想内部select会因为外键或其他触发器而返回任何内容?你可以给所有涉及的表的模式?或者只是尝试更改触发器以运行BEFORE DELETE。 – strkol 2012-03-27 21:27:43
我同意strkol,需要一个BEFORE触发器 – 2012-03-27 21:33:45
那么,这很容易尝试。我会给它一个镜头并报告结果。 – 2012-03-27 21:34:26