【发布时间】:2011-04-07 09:42:05
【问题描述】:
我的目标是在表中的行发生更新之前计算并保留某个值。
我创建了触发器和函数,我没有收到任何错误,但函数似乎没有启动。我哪里出错了?
流程
CREATE or REPLACE FUNCTION foo() returns trigger as
$BODY$
DECLARE
BEGIN
NEW.geomtry := st_transform(st_pointfromtext('POINT(' || NEW.af_lon || ' ' || NEW.af_lat || ')', 4326), 32643);
return NEW;
END;
$BODY$
language plpgsql;
在更新发生之前触发方法的触发器
CREATE TRIGGER foo_trigger BEFORE UPDATE ON foo_table FOR EACH ROW EXECUTE PROCEDURE foo();
【问题讨论】:
-
您对“似乎没有发挥作用”到底是什么意思。你正在运行什么语句,你期望会启动触发器
-
通过“开始”,我的意思是,当从应用程序触发对表中行的更新时,在实际更新发生之前需要计算和持久化的值不会发生。
-
您正在运行哪个语句来触发触发器?
-
UPDATE 语句。例如:UPDATE foo_table set lat = 12, lon =90 where id = 1;所以,我的想法是,在这个语句被持久化之前,应该计算几何并将其设置在相应的行中。
-
当您进行更新时,经纬度的新值是否实际存储在数据库中?
标签: postgresql stored-procedures triggers plpgsql