代码之家  ›  专栏  ›  技术社区  ›  Suniel

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

  •  2
  • Suniel  · 技术社区  · 8 年前

    我有一个要求,我必须禁止删除除一个用户即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 回复  |  直到 8 年前
        1
  •  6
  •   klin    8 年前

    删除前执行的触发器应返回 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;