【问题标题】:Check column value before delete trigger postgreSQL在删除触发器 postgreSQL 之前检查列值
【发布时间】:2017-12-17 20:31:12
【问题描述】:

有人可以告诉我如何在从 postgreSQL 中的表中删除之前检查特定列的值吗?

我当前的代码:

CREATE OR REPLACE FUNCTION f_tr_table_row_prohibit_delete() RETURNS TRIGGER AS 
$$
BEGIN
IF (OLD.table_state_code=0) THEN
    DELETE FROM mytable WHERE table_code=OLD.table_code;
ELSE
    RAISE EXCEPTION 'The deletion of a row is allowed only when table state code is 0!';
END IF;
END;
$$ 

CREATE TRIGGER tr_table_row_prohibit_delete 
BEFORE DELETE ON mytable 
FOR EACH ROW 
EXECUTE PROCEDURE f_tr_laua_rida_prohibit_delete();

LANGUAGE plpgsql SECURITY DEFINER STABLE
SET search_path = public, pg_temp;

我有一个名为 mytable 的表,其中包含 table_code 和 table_state_code 列。 在从 mytable 中删除之前,我想检查 table_state_code 是否为 0,如果不是,那么它不应该允许删除,如果是其他任何东西,那么它应该删除该行。

使用我当前的代码,当 table_state_code 不为 0 时,它会正确引发异常,但当它为 0 时,它会说: 错误:非易失函数中不允许使用 DELETE,而不是删除行。

提前致谢。

【问题讨论】:

    标签: sql postgresql triggers


    【解决方案1】:

    BEFORE DELETE 触发器中,您可以取消删除或让它发生。

    • 要取消删除,您可以return NULLRAISE EXCEPTION
    • 让删除继续return OLD

    删除已经开始(因为它是BEFORE DELETE 触发器)所以您不必执行DELETE FROM mytable WHERE table_code=OLD.table_code;

    请参阅文档中的Overview of Trigger Behavior

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2010-09-27
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      相关资源
      最近更新 更多