我知道有一些方法可以访问触发器定义中的查询类型、表名、oid 等:
http://www.postgresql.org/docs/8.3/static/plpgsql-trigger.html
无论如何,我是否有机会在一行上运行 UPDATE,它启动触发器而不需要用唯一 ID 标记表中的每一行?
例如如果我有用于存储日志的表,我在这里不需要任何唯一 ID...随着时间的推移,实际上可能会出现一些行,它们将是相等的。
CREATE TABLE users_log
(
uid bigint NOT NULL,
event smallint NOT NULL,
source character varying,
event_time timestamp with time zone
)
我知道,由于“带时区的时间戳”数据类型的微秒精度,这种情况几乎是不可能的,但并非真的不可能......
那么我应该如何在触发器中编写查询才能只更新插入的行?
$BODY$BEGIN
UPDATE "users_log" SET "event_time" = now(); -- this updates all rows
-- WHERE "id" = NEW.id; - this is what i don't want
RETURN NEW;
END;$BODY$
最佳答案
您只需在触发器中使用:
$BODY$BEGIN
NEW.event_time = now();
RETURN NEW;
END;$BODY$
而且它可以正常工作——不需要额外的更新。不过,您需要将此触发器声明为 BEFORE TRIGGER。
关于postgresql - 访问启动触发器的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5618170/