PostgreSQL - Eliminar Registro: No existe un identificador único para este registro.

   
Vista:

Eliminar Registro: No existe un identificador único para este registro.

Publicado por AlanAuPE alanaupe@hotmail.com (1 intervención) el 09/07/2011 17:26:44
Hola, soy un poco novato el postgresql.
Trabajo desde el PhpPgAdmin desde un host, no tengo instalado postgresql en mi pc el postgresl, lo trabajo del la pagina de inter
************
Explico
Tengo una tabla creada de esta manera
CREATE TABLE "Ingreso" (
"IdIngreso" serial NOT NULL Primary key,
"IdEmpleado" integer NOT NULL,
"Monto" numeric NOT NULL,
"FechaIngreso" date NOT NULL,
"FechaOperacion" timestamp without time zone NOT NULL,
"Nota" text,
"IdCategoria" integer NOT NULL,
"IdLinea" integer NOT NULL,
"Estado" boolean NOT NULL,
"IdPersonalEmite" integer NOT NULL,
"IdBanco" integer
) WITH (OIDS);
Tengo un Trigger en esta tabla
CREATE TRIGGER "SalvaIngreso" BEFORE DELETE OR UPDATE ON "Ingreso" FOR EACH ROW EXECUTE PROCEDURE "SalvaIngreso"()

La function:
CREATE FUNCTION "SalvaIngreso"() RETURNS trigger AS $$DECLARE
BEGIN
INSERT INTO "HistorialIngreso" ("IdIngreso","IdEmpleado","Monto","FechaIngreso","FechaOperacion","Nota","IdCategoria","IdLinea","Estado","IdPersonalEmite","IdBanco")
Values(OLD."IdIngreso",OLD."IdEmpleado",OLD."Monto",OLD."FechaIngreso",now(),OLD."Nota",OLD."IdCategoria",OLD."IdLinea",TG_OP,OLD."IdPersonalEmite",OLD."IdBanco");
RETURN NULL;
END;$$
LANGUAGE plpgsql;
***************************
El problema que tengo esque quiero eliminar una fila o registro de la base de datos “Ingreso” y me sale esta frase:

No existe un identificador único para este registro.

Y no se elimina
Pero al eliminar el Trigger si me permite eliminar la fila de la Tabla "Ingreso".
pero quiero que al eliminar la fila se guarde la información automáticamente el la tabla "HistorialIngreso".
No sé qué hacer
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Eliminar Registro: No existe un identificador único para este registro.

Publicado por CARLOS PINTO (1 intervención) el 07/01/2015 16:22:09
Hay un error en el Return, cuando se trabaja con trigger en pgsql tienes que retornar NEW (para los insert) y OLD (para los update y delete) en tu caso esta asociado a este ultimo por tanto debes hacer RETURN OLD; para que la funcion tenga exito y haga un `commit work` al culminar. Por el contrario estas diciendo que hay un error y no guarda lo que quieres insertar en la otra tabla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar