防止删除一个用户的表记录,并允许在postgresql中删除另一个用户

时间:2016-06-27 06:05:40

标签: postgresql plpgsql database-trigger

我要求我必须禁止除一个用户(即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的表记录。

我的代码在哪里错了?
提前谢谢。

1 个答案:

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