Trigger proteccion registros

From: Jorge Tornero - Listas <jtorlistas(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Trigger proteccion registros
Date: 2015-10-05 12:59:40
Message-ID: 5612743C.906@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estimados todos:

Como son ya varias las ocasiones en las cuales he sufrido sudores fríos
al borrar/actualizar registros que no deberían serlo, me he decidido a
incorporar un trigger en las tablas a proteger. He visto un módulo
llamado tuplock que lo viene resolviendo, pero al no ser un módulo
digamos estándar, no me interesa incrporarlo. Mi pregunta es en el
sentido siguiente:¿El trigger que os presento a continuación (en el
fondo muy parecido a tuplock) sería suficiente o es necesario otro tipo
de aproximación para resolver el problema? Téngase en cuenta que soy
usuario de postgresql con requerimientos sencillos (no bases de datos
emprsariales, etc)

Muchas gracias, un saludo

Jorge Tornero

(Se cuenta con que la tabla a proteger (en el ejemplo, prueba) cuenta
con un campo /protected/ booleano)

CREATE OR REPLACE FUNCTION check_row_protection() RETURNS TRIGGER AS
$check_row_protection$
DECLARE
BEGIN
IF TG_OP='UPDATE' THEN
IF (OLD.protected=False) or (NEW.protected=False and
OLD.protected=True) then
RETURN NEW;
ELSE
RAISE EXCEPTION 'NO SE PUEDE HACER UPDATE: LA CONSULTA
AFECTA A REGISTROS PROTEGIDOS';
RETURN NULL;
END IF;
ELSIF TG_OP='DELETE' THEN
IF OLD.protected=False THEN
RETURN OLD;
ELSE
RAISE EXCEPTION 'NO SE PUEDE HACER DELETE: LA CONSULTA
AFECTA A REGISTROS PROTEGIDOS';
RETURN NULL;
END IF;
END IF;

END;
$check_row_protection$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS protect_prueba ON prueba;
CREATE TRIGGER protect_prueba
BEFORE DELETE OR UPDATE ON prueba
FOR EACH ROW EXECUTE PROCEDURE check_row_protection();

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Arcel Labrada Batista 2015-10-05 15:13:37 Re: [MASSMAIL]Re: insert eficiente
Previous Message Arcel Labrada Batista 2015-10-05 12:52:08 Re: [MASSMAIL]Re: insert eficiente