2016-06-27 2 views
0

1人のユーザ、すなわち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

関連する問題