12
セキュリティに敏感なデザインのために、特定のテーブルでDELETEs
を無効にしたいと思います。PostgreSQLのテーブルでDELETEを無効にしますか?
DELETE
は、行にdeleted
フラグを設定するだけです(アプリケーションレイヤーで使用されるビューで表示されます)。
私が理解しているように、ruleは追加のクエリを生成するため、ルールは元のクエリを抑制できませんでした。実例として
トリガ(まだテストしていない)とのおもちゃの例:
-- data in this table should be 'undeletable'
CREATE table article (
id serial,
content text not null,
deleted boolean default false
)
-- some view that would only show articles, that are NOT deleted
...
-- toy trigger (not tested)
CREATE OR REPLACE FUNCTION suppress_article_delete()
RETURNS TRIGGER AS $sad$
BEGIN
IF (TG_OP = 'DELETE') THEN
UPDATE article SELECT id, content, TRUE;
-- NEW or NULL??
RETURN NEW;
END IF;
RETURN NULL;
END;
$sad$ LANGUAGE plpgsql;
DELETE
を抑制するための良い方法だろうか?
ありがとうございます!私はこの* undelete *デザインを管理(リボーク)ではなくデータモデルに入れたいと思うので、私は 'INSTEAD'ルールを試してみようと思います。 – miku