trigger - ¿Deshabilitar DELETE en la tabla en PostgreSQL?
trigger postgresql update example (1)
Para un diseño sensible a la seguridad, me gustaría desactivar DELETEs
en ciertas tablas.
El DELETE
simplemente debe establecer un indicador deleted
en una fila (que luego sería visible en una vista, que sería utilizada por la capa de la aplicación).
Como yo entiendo, una regla generaría consultas adicionales, por lo que una regla no podría suprimir la consulta original.
Como ilustración, un ejemplo de juguete con un gatillo (aún no probado):
-- 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;
¿Cuál sería una buena manera de suprimir un DELETE
?
Como yo entiendo, una regla generaría consultas adicionales, por lo que una regla no podría suprimir la consulta original.
En realidad, no, podría ser una regla INSTEAD
:
CREATE RULE shoe_del_protect AS ON DELETE TO shoe DO INSTEAD NOTHING;
(un ejemplo en la misma página del manual).
Otra forma es REVOKE
eliminar privilegios en la tabla en cuestión y crear procedimientos almacenados para eliminar ... y actualizar e insertar también probablemente.