语法错误创建触发器 - 列规范

时间:2017-03-28 18:33:29

标签: postgresql

下面的触发器定义有什么问题?我打算在更新或插入“date”列时执行“calculate_dow”函数,但它会生成以下错误...

CREATE TRIGGER tr_calculate_dow
    AFTER UPDATE OR INSERT OF date ON focusblu.events
    FOR EACH ROW
    EXECUTE PROCEDURE calculate_dow(date);
  

执行SQL失败:SQL CREATE TRIGGER tr_calculate_dow更新或插入日期后on focusblu.events FOR EACH ROW EXECUTE PROCEDURE calculate_dow(date);失败:错误:语法错误在“OF”第1行或附近第1行:... IGGER tr_calculate_dow更新或插入日期后... ^

2 个答案:

答案 0 :(得分:0)

我假设您将更新每次更新的日期,因此您无需指定date字段。

CREATE TRIGGER tr_calculate_dow
    AFTER UPDATE OR INSERT ON focusblu.events
    FOR EACH ROW
    EXECUTE PROCEDURE calculate_dow(date);

答案 1 :(得分:0)

错误显示您遇到语法错误:您无法在那里使用OF

文档非常清楚你想要什么,甚至有基于你的"每当日期列更新时的例子"标准:

https://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

也许你想要这样的东西?

CREATE TRIGGER tr_calculate_dow
  AFTER UPDATE ON focusblu.events
  FOR EACH ROW
  WHEN (OLD.date IS DISTINCT FROM NEW.date)
  EXECUTE PROCEDURE calculate_dow(NEW.date);

你很可能也想为另一个INSERT触发器做同样的事情,只选择日期。