Re: Como prohibir tajantamente que una columna de una tabla sea modificada?

From: cbeltran <cbeltran(at)roldan(dot)net>
To: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: AyudaPostgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Como prohibir tajantamente que una columna de una tabla sea modificada?
Date: 2004-10-07 21:23:24
Message-ID: 000d01c4acb3$e179dd00$272615ac@tania
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro

Gracias por la ayuda, el trigger y su respectiva funcion para cada tabla en
replica queda funcionando asi:

CREATE FUNCTION "rp_terceros"() RETURNS TRIGGER AS '
BEGIN
IF TG_OP = ''UPDATE'' AND OLD.terceros_id = NEW.terceros_id THEN
INSERT INTO control_replica (tablas_replica_id,
linea_tabla_replica_id, operacion) VALUES (180000001, NEW.terceros_id,
TG_OP);
RETURN NEW;
ELSE
RAISE EXCEPTION ''PRINCIPAL KEY NO MODIFICABLE'';
RETURN NULL;
END IF;
IF TG_OP = ''DELETE'' THEN
INSERT INTO control_replica (tablas_replica_id,
linea_tabla_replica_id, operacion) VALUES (180000001, OLD.terceros_id,
TG_OP);
RETURN OLD;
ELSE
INSERT INTO control_replica (tablas_replica_id,
linea_tabla_replica_id, operacion) VALUES (180000001,NEW.terceros_id,
TG_OP);
RETURN NEW;
END IF;
END;
' LANGUAGE 'plpgsql';
CREATE TRIGGER rp_terceros BEFORE INSERT OR UPDATE OR DELETE ON terceros FOR
EACH ROW EXECUTE PROCEDURE rp_terceros();

En las pruebas cuando tenia solo el RETURN NULL, en efecto no permitia
modificar el principal key, pero se hacía necesario que produjera un error.
Donde obtengo informacion adicional sobre el comportamiento de RAISE
EXCEPTION u otro mecanismo para forzar este tipo de error.

Carlos Beltran V.
Roldan SIA SA. Bogota - Colombia.

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
To: "cbeltran" <cbeltran(at)roldan(dot)net>
Cc: "AyudaPostgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Wednesday, October 06, 2004 12:29 PM
Subject: Re: [pgsql-es-ayuda] Como prohibir tajantamente que una columna de
una tabla sea modificada?

> On Wed, Oct 06, 2004 at 11:35:15AM -0500, cbeltran wrote:
>
> > Y dado que la replica opera con base a ese ID que es primary key
> > (terceros_id del ejemplo), es necesario asegurar que ningun aplicativo
> > o manejador tipo PgAccess modifique dicho contenido via UPDATE. Es
> > decir que solo permita consultar el ID o borrar completamente la
> > linea, mas no modificar dicho ID.
>
> Un trigger BEFORE UPDATE que retorne NULL si la columna es modificada?
>
> --
> Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
> "La experiencia nos dice que el hombre peló millones de veces las patatas,
> pero era forzoso admitir la posibilidad de que en un caso entre millones,
> las patatas pelarían al hombre" (Ijon Tichy)
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: ¿Has buscado en los archivos de las listas de correo?
>
> http://archives.postgresql.org

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2004-10-07 22:00:33 RE: pg_hba.conf
Previous Message Alvaro Herrera Munoz 2004-10-07 21:08:41 Re: problema con un Vacuumdb