Wyłącz DELETE w tabeli w PostgreSQL?
Dla projektu wrażliwego na bezpieczeństwo chciałbym wyłączyćDELETEs
na niektórych stołach.
TheDELETE
powinien jedynie ustawićdeleted
flagę w wierszu (która byłaby wtedy widoczna w widoku, który byłby używany przez warstwę aplikacji).
Jak rozumiemreguła wygenerowałoby dodatkowe zapytania - więc reguła nie mogła pominąć pierwotnego zapytania.
Jako przykład przykład zabawki z wyzwalaczem (jeszcze nie przetestowany):
-- 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;
Jaki byłby dobry sposób na zniesienieDELETE
?