Отключить DELETE для таблицы в PostgreSQL?

Для дизайна, чувствительного к безопасности, я хотел бы отключить DELETEsдля определенных таблиц.

DELETEдолжен просто установить флаг deletedв строке (, которая затем будет видна в представлении, которое будет использоваться прикладным уровнем ).

Насколько я понимаю, правило будет генерировать дополнительные запросы -, поэтому правило не может подавить исходный запрос.

В качестве иллюстрации можно привести игрушечный пример с триггером (, который еще не испытан ):

-- 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?

19
задан Brian Tompsett - 汤莱恩 22 August 2015 в 21:20
поделиться