Ayuda en creacion de trigger

From: Ricardo David Carrillo Sánchez <rcarrillosmx(at)yahoo(dot)com(dot)mx>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Ayuda en creacion de trigger
Date: 2006-01-25 19:30:37
Message-ID: 20060125193037.22389.qmail@web31011.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Hola a todos!!!,
Directo al grano, he tratado desde hace un pa de dìas
el realizar un trigger que me registre los movimientos
realizados en ciertas tablas, ahora bien, al realiarlo
como viene en los ejemplos de la documentacion online
y otros documentos que encontre respeto al tema, esto
es lo que pude realizar:

DROP TABLE ejemplo;
CREATE TABLE ejemplo
(
nombre text,
apellido text
);

CREATE FUNCTION audita() RETURNS trigger AS '
DECLARE
log_db record;
BEGIN
IF TG_OP="DELETE" THEN
INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),OLD.nombre,now(),TG_RELNAME,TG_OP);
ELSE
INSERT INTO log_db
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(),NEW.nombre,now(),TG_RELNAME,TG_OP);
END IF;
RETURN NEW;
END;
' LANGUAGE plpgsql;

CREATE TRIGGER ejemplo BEFORE INSERT OR DELETE OR
UPDATE ON ejemplo
FOR EACH ROW EXECUTE PROCEDURE audita();

para lo cual me manda un error del siquiente tipo:
DROP TABLE
CREATE TABLE
psql:otro-trigger.psql:19: ERROR: syntax error at or
near "$1" at character 14
QUERY: INSERT INTO $1
(usuario,registro,fechayh,tabla,opera) values
(getpgusername(), $2 ,now(), $3 , $4 )
CONTEXT: SQL statement in PL/PgSQL function "audita"
near line 5
psql:otro-trigger.psql:19: LINE 1: INSERT INTO $1
(usuario,registro,fechayh,tabla,opera) valu...
psql:otro-trigger.psql:19: ^
psql:otro-trigger.psql:22: ERROR: function audita()
does not exist

Por otro lado probe el ejemplo que viene en la
documentaciòn y de igual forma no me lo acepta :

CREATE TABLE empleados (
empleado_nombre text NOT NULL,
salario integer
);
CREATE TABLE empleados_audit(
operacion char(1) NOT NULL,
horafecha timestamp NOT NULL,
userid text NOT NULL,
empleado_nombre text NOT NULL,
salario integer
);
CREATE OR REPLACE FUNCTION procesa_empleados_audit()
RETURNS TRIGGER AS '
BEGIN
--
-- Crea un registro en empleado_audit para
reflejar las operaciones
-- realizadas en empleados utiliza las variables
especiales TG_OP
-- para efectuar la operación
IF (TG_OP == "DELETE") THEN
INSERT INTO empleados_audit SELECT "D",
now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP == "UPDATE") THEN
INSERT INTO empleados_audit SELECT "U",
now(), user,
NEW.empleado_nombre,
NEW.salario;
RETURN NEW;
ELSIF (TG_OP == "INSERT") THEN
INSERT INTO empleados_audit SELECT "I",
now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL; -- el resultado es ignorado puesto
que este
-- es un trigger AFTER
END;
' language plpgsql;
CREATE TRIGGER empleados_audit AFTER INSERT OR UPDATE
OR
DELETE ON empleados FOR EACH ROW EXECUTE
PROCEDURE
procesa_empleados_audit();

En verdad agradecerìa mucho cualquier orientación.
saludos.

:::::::::::::::::::::::::::::::::::::::::::::::
:: El éxito es una suma de fracasos..... ::
:: el secreto está en no acostubrase a ambos ::
:::::::::::::::::::::::::::::::::::::::::::::::




___________________________________________________________
Do You Yahoo!?
La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ariel Romero 2006-01-25 20:39:17 Comparacion seria entre PostgreSQL y SQL Server
Previous Message Xavier Vidal Piera 2006-01-25 18:41:05 Re: manejo de case studio y postgresql