使用PostgreSQL更新只读列时引发异常

时间:2017-03-01 15:42:46

标签: sql postgresql syntax-error database-trigger

我正在尝试在修改只读列时引发异常。为此我在更新之前使用了一个触发器,但是我遇到了语法错误。

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的新鲜事物然后

我想我可以制作一个程序,将代码扩展到一堆行,但我想知道为什么这段代码无论如何都不起作用。

1 个答案:

答案 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();