Postgres - 如果行中的列不为null,如何停止更新行

时间:2017-05-26 18:10:43

标签: postgresql

我需要设置一个约束,一旦使用非空数据更新该行中的特定列,就会阻止更新行。

2 个答案:

答案 0 :(得分:0)

在UPDATE中使用WHERE子句

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE column1 is not NULL;

答案 1 :(得分:0)

你会设置一个触发器,如果​​列已经填充则返回NULL,如果不是则返回NEW对象。

CREATE OR REPLACE FUNCTION public.safeguard_tg_fn() RETURNS trigger AS
$BODY$BEGIN

    --If the column was not set, allow updating the entire row
    IF OLD.myimportantcol ISNULL THEN
        RETURN NEW; 
    ELSE
    --Else, the column is already populated, cancel the entire update (for this row only)
        RETURN NULL; 
    END IF;
END;$BODY$ LANGUAGE plpgsql;

CREATE TRIGGER safeguard_tg BEFORE UPDATE
   ON public.mytable FOR EACH ROW
   EXECUTE PROCEDURE public.safeguard_tg_fn();