我要求我必须禁止除一个用户(即user1)之外的所有用户删除表记录。因此,我使用了触发器,如下所示。
CREATE OR REPLACE FUNCTION prevent_deletion() RETURNS trigger AS $$
declare
cur_user varchar(30);
BEGIN
Select current_user into cur_user;
IF cur_user != 'user1' THEN
RAISE EXCEPTION 'You cannot delete records from this table!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
触发器阻止删除user1以外的用户的表记录,但这对于用户user1不起作用。我的意思是它不删除user1的表记录。
我的代码在哪里错了?
提前谢谢。
答案 0 :(得分:3)
删除前执行的触发器应返回old
。
CREATE OR REPLACE FUNCTION prevent_deletion()
RETURNS trigger AS $$
BEGIN
IF current_user != 'user1' THEN
RAISE EXCEPTION 'You cannot delete records from this table!';
END IF;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;