Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我怎样才能使用;“如果声明”;在一个postgres触发器中_Sql_Postgresql_If Statement_Plpgsql - Fatal编程技术网

Sql 我怎样才能使用;“如果声明”;在一个postgres触发器中

Sql 我怎样才能使用;“如果声明”;在一个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

我有一个触发函数,我只想在插入的某些实例上触发,在本例中,如果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();
,您不需要在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;