2016-06-27 45 views
0

我有一个要求,我必须禁止除一个用户(即user1)以外的所有用户删除表记录。所以为此,我使用了如下的触发器。防止删除一个用户的表记录,并允许在postgresql中删除另一个用户

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

什么是postgres版本? –

+0

https://www.postgresql.org/docs/9.5/static/sql-createpolicy.html观看行级安全 –

+0

@VaoTsun它的9.5 – Suniel

回答

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; 
+0

非常感谢你指出我愚蠢的错误。 – Suniel

相关问题