【发布时间】:2011-06-09 04:47:05
【问题描述】:
我是 postgresql 和数据库部分的新手。我想在插入语句之前使用触发器在 postgresql 中检查函数是否退出。有人知道如何创建触发器吗?
【问题讨论】:
标签: database postgresql
我是 postgresql 和数据库部分的新手。我想在插入语句之前使用触发器在 postgresql 中检查函数是否退出。有人知道如何创建触发器吗?
【问题讨论】:
标签: database postgresql
创建一个特殊的触发函数:
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 只是一个示例列。使用消息中新行(或无)中您喜欢的任何列。
如果检查本地化到行,考虑使用列约束,例如:
CREATE TABLE my_table (
some_column int CHECK (some_column between 0 and 10),
other_column int CHECK (other_column < some_column)
)
【讨论】: