我有一个触发器函数,我只想在某些 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/