如果另一列为空,禁止用户更新列?

Luf*_*ude 0 sql postgresql triggers constraints

我有mytable其中有3个整数字段:id,status,project_id.

我已经告诉人们,在给它赋值之前,他们不应该在4点之前进展状态project_id.当然人们不听,然后就会出现问题.

如果有人在project_id列是否尝试从状态4更新到5时有没有办法返回错误null?我仍然需要人们能够将状态从2或3更新到状态4,无论它有什么project_id.

Ale*_*s G 5

如果需要非常简单的检查,可以使用@stickbit建议的CHECK约束.

如果您需要更复杂的逻辑,则可以使用TRIGGER功能

CREATE FUNCTION check_status()
  RETURNS trigger AS
$mytrigger$
BEGIN
   IF OLD.status = 4 AND NEW.status >= 5 AND NEW.project_id IS NULL THEN
      RAISE EXCEPTION 'Project ID must be assigned before progressing to status 5';
   END IF;
   RETURN NEW;
END
$mytrigger$
LANGUAGE plpgsql;

CREATE TRIGGER project_id_check
BEFORE UPDATE ON "MyTable"
FOR EACH ROW EXECUTE PROCEDURE check_status();
Run Code Online (Sandbox Code Playgroud)