我正在尝试在修改只读列时引发异常。为此我在更新之前使用了一个触发器,但是我遇到了语法错误。
DROP TRIGGER IF EXISTS check_update_guid_line ON line;
CREATE TRIGGER check_update_guid_line
BEFORE UPDATE ON line FOR EACH ROW
WHEN (OLD.guid IS DISTINCT FROM NEW.guid) THEN
RAISE EXCEPTION 'you cant modify the guid of a line');
错误:“THEN”第29行或附近的语法错误:... OLD.guid 来自NEW.guid的新鲜事物然后
我想我可以制作一个程序,将代码扩展到一堆行,但我想知道为什么这段代码无论如何都不起作用。
答案 0 :(得分:1)
将其拆分为两步,例如:
CREATE OR REPLACE FUNCTION fn_1()
RETURNS trigger
LANGUAGE plpgsql
COST 1
AS $function$
BEGIN
IF NEW.id is distinct from OLD.id then
RAISE EXCEPTION '%','whatever it is';
END IF;
return NEW;
END;
$function$
;
CREATE TRIGGER tgr
BEFORE UPDATE ON line
FOR EACH ROW
EXECUTE PROCEDURE fn_1();