【问题标题】:PostgreSQL trigger and stored procedure not kicking inPostgreSQL 触发器和存储过程未启动
【发布时间】: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


【解决方案1】:

您在存储过程中拼写错误“几何”。确保它在您的表格和存储过程中拼写一致。

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 2013-12-30
    • 1970-01-01
    • 2011-12-19
    • 2018-01-18
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多