【发布时间】:2015-05-04 15:42:45
【问题描述】:
这是一个触发器,由对表的插入、更新或删除调用。保证调用表的所有列都受到影响,并且删除表也存在。
CREATE OR REPLACE FUNCTION sample_trigger_func() RETURNS TRIGGER AS $$
DECLARE
operation_code char;
table_name varchar(50);
delete_table_name varchar(50);
old_id integer;
BEGIN
table_name = TG_TABLE_NAME;
delete_table_name = TG_TABLE_NAME || '_deletes';
SELECT SUBSTR(TG_OP, 1, 1)::CHAR INTO operation_code;
IF TG_OP = 'DELETE' THEN
OLD.mod_op = operation_code;
OLD.mod_date = now();
RAISE INFO 'OLD: %', (OLD).name;
EXECUTE format('INSERT INTO %s VALUES %s', delete_table_name, (OLD).*);
ELSE
EXECUTE format('UPDATE TABLE %s SET mod_op = %s AND mod_date = %s'
, TG_TABLE_NAME, operation_code, now());
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
ELSE 分支触发无限循环。可能还有更多问题。
如何解决?
【问题讨论】:
-
我投票决定将此问题作为离题结束,因为没有问题陈述,而且看起来 OP 要求进行代码审查。这个问题可能是codereview.stackexchange.com 的主题。
-
@Kevin:你说得对,我添加了 OP 忘记的问题陈述。从上一个问题我可以看出。
标签: postgresql triggers plpgsql postgresql-9.1