4 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();
Run Code Online (Sandbox Code Playgroud)
根据文档,您不需要在 IF 语句中显式测试布尔数据类型 - 它们默认测试是否为真,因此您可以使用:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15392 次 |
| 最近记录: |