Re: triggers dejan de funcionar

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Esneiker Enriquez Cabrera <eenriquez(at)cav(dot)desoft(dot)cu>
Cc: 'Lista Postgres ES' <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: triggers dejan de funcionar
Date: 2016-02-29 21:06:05
Message-ID: 20160229210605.GA318909@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Esneiker Enriquez Cabrera escribió:
> Esta es una función que dejó de funcionar.
>
> CREATE OR REPLACE FUNCTION actualizar_archivo_adjunto()
> RETURNS trigger AS
> $BODY$
> BEGIN
> UPDATE mensaje SET archivo_adjunto=1 WHERE mensaje.id=new.id_mensaje;
> UPDATE expediente_incidencia SET archivo_adjunto=1, leido=FALSE WHERE
> expediente_incidencia.id=new.id_expdte_inc;
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE
> COST 100;
> ALTER FUNCTION actualizar_archivo_adjunto() OWNER TO postgres;
>
> No hacía el update luego de crear los nuevos esquemas. El search_path no lo
> he tocado.

¿tendrás tablas mensaje o expediente_incidencia en los nuevos esquemas?
De ser así, es muy posible que la función esté tratando de modificar las
nuevas tablas en lugar de las que están en public -- suponiendo que el
search_path tenga los otros esquemas antes que public.

La solución es poner los nombres de objetos de manera que no sean
ambiguos. Por ej. podrías hacer esto

UPDATE public.mensaje SET archivo_adjunto=1 WHERE mensaje.id=new.id_mensaje;

o bien podrías poner una cláusula SET en el CREATE FUNCTION, por ej.

CREATE OR REPLACE FUNCTION public.actualizar_archivo_adjunto() RETURNS trigger
SET search_path TO 'public'
AS $body$
begin
update ...

$body$;

(Esto hace que el search_path se modifique a valor especificado cada vez
que se ejecute la función).

De hecho hacerlo de esta forma es importante, porque te protejes de que
algún payaso cree objetos antes que los tuyos en search_path y te haga
ejecutar código definido por él que tú no querrías. (En otras palabras
hay una vulnerabilidad de seguridad en la forma como lo estás haciendo
actualmente).

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Esneiker Enriquez Cabrera 2016-02-29 21:18:55 RE: triggers dejan de funcionar
Previous Message Esneiker Enriquez Cabrera 2016-02-29 20:59:22 RE: triggers dejan de funcionar