sql - 如何在 postgres 触发器中使用 "IF statements"

标签 sql postgresql if-statement plpgsql

我有一个触发器函数,我只想在某些 INSERTS 实例上触发,在本例中,if do_backup = true。如果它在所有情况下都触发,我会得到一个无限循环。逻辑对我来说似乎很简单,并且该功能的其余部分有效。但是触发函数似乎没有注册我的条件并且总是运行,即使在 backup = true 时也是如此。

CREATE OR REPLACE FUNCTION table_styles_backup() RETURNS
 TRIGGER AS $table_styles_backup$

 DECLARE
 ...
 do_backup  boolean;

    BEGIN
 SELECT backup INTO do_backup FROM table_details WHERE id=NEW.table_meta_id;

        IF (do_backup = true) THEN 

  ...


            INSERT INTO table_styles_versions 
   (
   ...
   )

  VALUES (
   ...
   );
 END IF;

    RETURN NULL;

    END;

$table_styles_backup$  LANGUAGE plpgsql;

CREATE TRIGGER table_styles_backup AFTER INSERT ON table_styles

FOR EACH ROW EXECUTE PROCEDURE table_styles_backup();

最佳答案

Per the documentation ,您不需要在 IF 语句中显式测试 bool 数据类型 - 它们默认测试是否为真,因此您可以使用:

IF do_backup THEN
  ...
  INSERT INTO table_styles_versions (...
ELSE
  -- omit this & the ELSE keyword if nothing needs to happen if do_backup is false
END IF;

关于sql - 如何在 postgres 触发器中使用 "IF statements",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056738/

相关文章:

Mysql只返回两张表有差异的记录

php - mysql 中 'KEY' 的用途是什么,它不允许我在 phpmyadmin 中编辑记录

sql - 如何通过一个请求计算玩家的多个排名?

sql - 复制 CSV 文件,然后分析?一步步?

C++ If 语句问题 - 显示错误信息

javascript - "IF ELSE"JavaScript 不工作

mysql - 计算来自具有相同模式的不同数据库的查询

sql - 如何使用 select 语句的结果更新表中的列,该语句使用正在更新的行作为 where 子句的一部分?

sql - Postgresql COALESCE 没有设置默认值

c++ - 如何从 if 语句 C++ 中获取值?