如何在trigger function
之前创建adding/updating
,function
应该检查具有相同id
的记录(即id
与现有{的比较与objects
具有相同属性的{1}}如果找到具有id的记录,则该条目设置为temporary_object
,然后添加包含相应值的条目在该记录中找到的属性(除了为新记录设置的属性除外),当time_dead
为空时,新时间的time_dead
等于当前时刻的那个时间。因此,新记录time_create
就像time_create
祖先一样。
如果找到具有该id的记录,则将其添加到数据库中,并将该机构添加为当前时间的time_dead's
。
例如,这里是一个简单的解释(仅用于解释目的)
time_create
所以如果一个叫id 1的henry在06.12进入房间并在07.12离开,下一次再次进入另一个房间时time_dead将等于time_create(因此旧条目的time_dead和新条目的time_create将相等) ) 这些是我的表格,以sql格式
id time_create time-dead student amount
1 06.12 07.12 henry 500
1 07.12 henry 1000
这就是我想要做的但我害怕我不知道如何完成但是我100%不对可能会有所帮助
CREATE TABLE temporary_object
(
id integer NOT NULL,
time_create timestamp without time zone NOT NULL,
time_dead timestamp without time zone,
CONSTRAINT temporary_object_pkey PRIMARY KEY (id, time_create)
)
CREATE TABLE persons
(
fname text,
fsurname text,
)
INHERITS (temporary_object)
CREATE TABLE rooms
(
roomnum integer,
course integer,
passport text,
students_number text
)
INHERITS (temporary_object)
这是函数
CREATE TRIGGER trigger2
BEFORE INSERT OR UPDATE
ON persons
FOR EACH ROW
EXECUTE PROCEDURE func1();
答案 0 :(得分:5)
我不能告诉你我在你的问题中遗漏了什么,但我试着回答我的想法。
行级触发器可以访问受NEW
和OLD
变量影响的行的版本(取决于TG_OP
)。在这种情况下,您可以使用NEW
:
CREATE OR REPLACE FUNCTION func1()
RETURNS TRIGGER AS
$persons$
DECLARE
i integer;
BEGIN
IF TG_OP = 'INSERT'
THEN
UPDATE persons
SET time_dead = NEW.time_create
WHERE
id = NEW.id -- we are looking for the same ID
AND time_dead IS NULL
;
ELSE -- UPDATE
-- do here something
END IF;
END;
$persons$
LANGUAGE plpgsql;
这只是一个启动器,根据您的需要进行修改。