postgresql - 更新后如何创建触发器来更改记录?

标签 postgresql triggers plpgsql

触发器有问题。我有简单的表 stats .在此表中,我有例如:id , energy , is_alive .我需要创建一个触发器 ON UPDATE像这样:

CREATE TRIGGER AFTER UPDATE
IF energy <= 0 THEN 
  UPDATE stats SET is_alive = false

当我执行时:

UPDATE stats SET energy = -3 WHERE id = 7

我愿意:

  1. 更新值 - 3
  2. 执行触发器并检查新值是 <= 0
  3. 如果是,更新 is_alive = false 这条记录 id = 7

这可能吗?或者触发器是否必须检查所有表并更改所有 energy 时的行将是 <= 0

最佳答案

像这样的触发函数:

CREATE FUNCTION trg_stats_insup_bef()
  RETURNS trigger AS
$func$
BEGIN
IF NEW.energy <= 0 THEN
   NEW.is_alive := FALSE;
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;

还有一个 trigger (之前不是 之后):

CREATE TRIGGER insup_bef
BEFORE INSERT OR UPDATE OF energy ON stats  -- covers INSERT, too
FOR EACH ROW
EXECUTE PROCEDURE trg_stats_insup_bef()

关于postgresql - 更新后如何创建触发器来更改记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852854/

相关文章:

postgresql - plpgsql中的动态变量名(字符串到变量名)

c# - 在 C# 中存储查询还是在 Postgres 中使用存储函数?

postgresql查询时分秒

postgresql - 在哪里定义 Postgres 中的最大连接数?

postgresql - Postgres 触发器仅在 NEW.column = true 时执行过程

MySQL - 触发器还是复制更好?

sql - 编写/调试复杂 PL/pgSQL 查询的最佳实践

sql - PostgreSql 中的简单聚合查询非常慢,有什么改进方法吗?

c# - 如何捕获在 Entity Framework 4 触发的触发器中调用的 RAISERROR 抛出的 SqlException?

postgresql - plpgsql 触发器 - 将一组动态 ID 传递给插入查询 (v9.6)