在 PostgreSQL 中,触发器(Triggers)是一种在表上执行自定义操作的机制,通常与 INSERT、UPDATE 或 DELETE 语句相关联。在触发器中,有一些特殊的关键字和内建变量,其中包括 NEW 和 OLD,它们用于表示触发器中的行的新值和旧值。

在触发器中,UPDATE 操作涉及到更新行的一部分或全部列。如果您想在触发器中仅关注发生更新的列,可以使用 UPDATE OF 子句来指定要监视的列,从而降低触发器的运行成本。

以下是一个简单的例子,演示如何使用 UPDATE OF 子句来定义触发器,以便只在特定列发生更新时执行相应的操作:
-- 创建一个简单的示例表
CREATE TABLE example_table (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

-- 创建一个 BEFORE UPDATE 触发器,只在 'name' 列发生更新时执行
CREATE OR REPLACE FUNCTION update_trigger_function()
RETURNS TRIGGER AS $$
BEGIN
    -- 在此处添加您的触发器逻辑,例如,仅在 'name' 列更新时执行的逻辑
    IF NEW.name IS DISTINCT FROM OLD.name THEN
        -- 执行您的操作,例如,将更新的信息写入日志
        RAISE NOTICE 'Name column updated from % to %', OLD.name, NEW.name;
    END IF;

    -- 如果需要在其他列更新时执行其他操作,可以在这里添加更多的条件和逻辑

    -- 返回触发器
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建触发器,指定只在 'name' 列更新时触发
CREATE TRIGGER update_trigger
BEFORE UPDATE OF name ON example_table
FOR EACH ROW
EXECUTE FUNCTION update_trigger_function();

在上面的例子中,创建了一个名为 update_trigger_function 的触发器函数,它包含了一些逻辑,仅在 name 列发生更新时执行。然后,通过 CREATE TRIGGER 语句创建了一个触发器,该触发器使用 BEFORE UPDATE OF name ON example_table 条件,指定只在 name 列更新时触发。

请根据实际需求修改触发器的逻辑和监视的列。


转载请注明出处:http://www.zyzy.cn/article/detail/8451/PostgreSQL