如何在postgresql中创建Trigger以检查函数是否退出

时间:2011-06-09 04:47:06

标签: database postgresql

我是postgresql和数据库部分的新手。我想在插入语句之前使用触发器在postgresql中检查函数是否退出。任何人都知道如何创建触发器吗?

1 个答案:

答案 0 :(得分:4)

创建一个特殊的触发函数:

CREATE OR REPLACE FUNCTION some_function() 
RETURNS trigger AS $$
    BEGIN
        IF some_condition THEN
            RAISE EXCEPTION 'Some message for id %', NEW.id;
        END IF;
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

然后定义触发它的触发器

CREATE TRIGGER some_trigger 
BEFORE INSERT OR UPDATE ON some_table
FOR EACH ROW EXECUTE PROCEDURE some_function();

引发异常时,更新将失败。

执行的SQL可能是或任意复杂,涉及您喜欢的任何查询或函数。它还可以通过SET NEW.some_column = some_value更改新值,甚至更新其他表。

请注意,NEW.id仅为示例列。在消息中使用NEW行(或无)中您喜欢的任何列。

如果检查已本地化为行,请考虑使用列约束,例如:

CREATE TABLE my_table (
    some_column int CHECK (some_column between 0 and 10),
    other_column int CHECK (other_column < some_column)
)