Dla projektu wrażliwego na bezpieczeństwo, chciałbym wyłączyć DELETEs
na niektórych tabelach.Wyłączyć DELETE w tabeli w PostgreSQL?
Po prostu należy ustawić flagę deleted
w rzędzie (która byłaby wtedy widoczna w widoku, który byłby używany przez warstwę aplikacji).
Jak rozumiem, rule generuje dodatkowe zapytania - więc reguła nie może powstrzymać pierwotnego zapytania.
jako ilustracji przykładem zabawki z wyzwalaczem (jeszcze nie testowane):
-- 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, aby stłumić DELETE
?
Dzięki! Chciałbym dostać ten * cofnięty * projekt do modelu danych, a nie do administracji (odwołanie) - więc domyślam się, że spróbuję reguły "INSTEAD". – miku