un trigger sencillo que no hay manera con el

From: emilio alvarez <dr7tbien(at)terra(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: un trigger sencillo que no hay manera con el
Date: 2004-11-03 12:25:24
Message-ID: 4188CE34.8080608@terra.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

tengo varias tablas, y cada vez que elimino un elemento de alguna de
estas tablas quiero que en una tabla de referencias a todas las demas se
elmine la referencia al articulo eliminado. La tabla ocurrencias_clave
es una especie de buscador, tiene varios campos, pero los mas
importantees son tabla y id_referencia_tabla . Si por jemplo quiero
borrar la referencia en ocurrencias_clave al articulo cuya id es 14,
ejecutare la sentencia:

DELETE FROM ocurrencias_clave WHERE tabla='articulos' AND
id_referencia_tabla=14;

para ello he creado un trigger para una de las tablas, la tabla articulos:

CREATE TRIGGER trigger_borrado_ocurrencias_clave BEFORE DELETE ON articulos
FOR EACH ROW
EXECUTE PROCEDURE eliminar_ocurrencia();

y una funcion:

CREATE OR REPLACE FUNCTION eliminar_ocurrencia() RETURNS TRIGGER AS '
BEGIN
DELETE FROM ocurrencias_clave WHERE tabla=TG_RELNAME AND id=OLD.id;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';

Potr lo que veeo en el manual, TG_RELNAME guarda el nombre de la tabla
del trigger, en este caso 'articulos' y OLD.id guardaria la id del
articulo que se borrarĂ¡, en este caso el 14. Sin embargo no funciona
esto. Me da el siguioente error:

WARNING: Error occurred while executing PL/pgSQL function
eliminar_ocurrencia
WARNING: line 2 at SQL statement
ERROR: Unable to identify an operator '=' for types 'character varying'
and 'name'
You will have to retype this query using an explicit cast

gracias anticipadas

dr7tbien

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2004-11-03 14:13:57 Re: Postgresql
Previous Message Diego A. Gil 2004-11-03 12:21:30 Re: un trigger sencillo que no hay manera con el