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.
如果需要非常简单的检查,可以使用@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)