【发布时间】:2012-12-06 21:55:20
【问题描述】:
我如何在adding/updating 之前创建trigger function,function 应该检查具有相同id 的记录(即比较id 与现有objects 具有相同的属性@ 987654327@)如果找到了一个id的记录,则将该条目设置为time_dead,然后它添加一个条目,其中包含在该记录中找到的属性的相应值(除了那些设置为新记录),当time_dead 为空时,新时间的time_create 等于当前时刻的那个时间。因此,新记录time_create 就像time_dead's 的祖先。
如果找到具有该 id 的记录,则将其添加到数据库中,并以当前时间的time_create 建立。
例如这里是一个简单的解释(只是为了解释的目的)
id time_create time-dead student amount
1 06.12 07.12 henry 500
1 07.12 henry 1000
因此,如果一个名为 henry 且 ID 为 1 的学生在 06.12 进入房间并在 07.12 离开,下次他再次进入另一个房间时 time_dead 将等于 time_create(因此旧条目的 time_dead 和新条目的 time_create - 将相等) 这些是我下面的 sql 格式表
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)
这就是我想要做的,但恐怕我不知道如何完成它,但我 100% 不对,可能会有所帮助
CREATE TRIGGER trigger2
BEFORE INSERT OR UPDATE
ON persons
FOR EACH ROW
EXECUTE PROCEDURE func1();
这就是函数
CREATE OR REPLACE FUNCTION func1() RETURNS TRIGGER AS $persons$
DECLARE
time_create integer;
time_dead timestamp;
id timestamp;
BEGIN
IF (TG_OP = 'INSERT') THEN
time_create=
【问题讨论】:
标签: function postgresql stored-procedures triggers