Sql 我怎样才能使用;“如果声明”;在一个postgres触发器中
我有一个触发函数,我只想在插入的某些实例上触发,在本例中,如果do_backup=true,则触发该函数。如果它在所有实例中都激发,我将得到一个无限循环。逻辑对我来说似乎很简单,函数的其余部分也可以工作。但是触发器函数似乎没有注册我的条件,并且总是运行,即使backup=trueSql 我怎样才能使用;“如果声明”;在一个postgres触发器中,sql,postgresql,if-statement,plpgsql,Sql,Postgresql,If Statement,Plpgsql,我有一个触发函数,我只想在插入的某些实例上触发,在本例中,如果do_backup=true,则触发该函数。如果它在所有实例中都激发,我将得到一个无限循环。逻辑对我来说似乎很简单,函数的其余部分也可以工作。但是触发器函数似乎没有注册我的条件,并且总是运行,即使backup=true CREATE OR REPLACE FUNCTION table_styles_backup() RETURNS TRIGGER AS $table_styles_backup$ DECLARE ... do
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();
,您不需要在IF语句中显式测试布尔数据类型-它们默认测试为true,因此您可以使用:
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;