【发布时间】:2012-12-07 07:24:59
【问题描述】:
有没有办法解决这个错误或者我的代码中缺少一些东西,我正在学习postgresql,我一直在研究table inheritance and triggers 我有两个表temporary_object table 和persons table个人表继承了临时对象的所有属性,然后我在个人表上创建了一个触发器函数,它检查具有相同id before updating 和tables 的记录当我尝试运行insert query 时出现问题,我得到这些errors
ERROR: end of trigger procedure achieved without RETURN
CONTEXT: function PL / pgSQL muli_function ()
ERROR: end of trigger procedure achieved without RETURN
SQL-state: 2F005
Context: The PL / pgSQL muli_function ()
这是通过插入查询
INSERT INTO persons (id, time_create, time_dead, First_name, Last_name) values (1, '2011-10-07 15:25:00 EDT', '2011-10-07 3:25 PM EDT', 'sathiya', 'james');
这是我的触发函数并自行触发
CREATE FUNCTION muli_function() RETURNS trigger AS '
BEGIN
IF tg_op = ''UPDATE'' THEN
UPDATE persons
SET time_dead = NEW.time_create
Where
id = NEW.id
AND time_dead IS NULL
;
RETURN new;
END IF;
END
' LANGUAGE plpgsql;
CREATE TRIGGER sofgr BEFORE INSERT OR DELETE OR UPDATE
ON persons FOR each ROW
EXECUTE PROCEDURE muli_function();
这是我的两个表查询
CREATE TABLE temporary_object
(
id integer NOT NULL,
time_create timestamp without time zone NOT NULL,
time_dead timestamp without time zone,
PRIMARY KEY (id, time_create)
);
CREATE TABLE persons
(
First_Name text,
Last_Name text
)
INHERITS (temporary_object);
【问题讨论】:
-
muli_function只关心 UPDATE 时,为什么要绑定 INSERT、DELETE 和 UPDATE?您可能想了解美元报价,这对于函数非常方便。 -
对于触发了触发器的表,无需使用 UPDATE 语句。只需使用
new.time_dead := new.time_create分配值
标签: database postgresql triggers plpgsql