Postgresql-防止发生UPDATE的函数

问题描述 投票:0回答:1

使用PostgreSQL 11.6。如果不同的列数据满足某些条件,我想防止在给定的列上发生UPDATE。我认为最好的方法是在更新之前通过事件触发器。

目标:如果列'sysdescr'='no_response',则不要更新列'snmp_community'。

我在下面的函数中尝试的是在满足该条件时跳过/传递给定的更新。但是,即使条件不匹配,它也会阻止任何更新。

CREATE OR REPLACE FUNCTION public.validate_sysdescr()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$BEGIN
    IF NEW.sysdescr = 'no_response' THEN
        RETURN NULL;
    ELSE
        RETURN NEW;
    END IF;
END;
$function$;

注意:我当时想使用某种“跳过”操作可能是最好的,以使该功能更可重用。但是,如果我需要调出特定的列以不进行更新(snmp_community),那很好。

postgresql database-trigger
1个回答
0
投票

将步骤更改为:

CREATE OR REPLACE FUNCTION public.validate_sysdescr()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$BEGIN
    IF NEW.sysdescr = 'no_response' THEN
        NEW.snmp_community = OLD.snmp_community ;
    END IF;
    RETURN NEW;
END;
$function$;

并将其关联到更新触发器上的公共触发器:

CREATE TRIGGER validate_sysdescr_trg  BEFORE UPDATE ON <YOUR_TABLE>
    FOR EACH ROW
    EXECUTE PROCEDURE public.validate_sysdescr();
© www.soinside.com 2019 - 2024. All rights reserved.