Re: [pgsql-es-ayuda] Deferrable ¿funciona?

From: Nicolás Domínguez Florit <ndomin(at)rec(dot)unicen(dot)edu(dot)ar>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: "PostgreSQL list ES" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Deferrable ¿funciona?
Date: 2006-02-08 12:08:23
Message-ID: 007301c62ca8$600cb050$ea84a8c0@Nico
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Les paso un ejemplo completo y lo mas detallado que he podido hacer:

CREATE TABLE "public"."persona" (
"legajo" INTEGER NOT NULL,
"datos" VARCHAR,
CONSTRAINT "table1_pkey" PRIMARY KEY("legajo")
) WITH OIDS;
COMMENT ON TABLE "public"."persona"
IS 'Tabla de prueba que contiene a los legajos de las personas con sus
datos';

CREATE TABLE "public"."telefono" (
"legajo" INTEGER NOT NULL,
"datos" VARCHAR,
CONSTRAINT "fk_telefono_persona_legajo" FOREIGN KEY ("legajo")
REFERENCES "public"."persona"("legajo")
ON DELETE RESTRICT
ON UPDATE CASCADE
DEFERRABLE
INITIALLY DEFERRED
) WITH OIDS;
COMMENT ON TABLE "public"."telefono"
IS 'Tabla de prueba que contiene los telefonos de los legajos de las
personas.';

insert into persona values(1,'Persona1');
insert into persona values(2,'Persona2');
insert into persona values(3,'Persona3');

insert into telefono values (1,'telefono 1');
insert into telefono values (1,'telefono 2');
insert into telefono values (1,'telefono 3');
insert into telefono values (2,'telefono 1');
insert into telefono values (2,'telefono 2');
insert into telefono values (3,'telefono 1');

--Ejemplo 1
begin;
SET CONSTRAINTS ALL DEFERRED;
insert into telefono values (5,'telefono 1');
COMMIT;
--Antes del commit no tira ningun tipo de error (como era de esperar).
--Al momento de hacer el commit tira el siguiente error:
--ERROR: insert or update on table "telefono" violates foreign key
constraint "fk_telefono_persona_legajo"

--Ejemplo 2
begin;
SET CONSTRAINTS ALL DEFERRED;
delete from persona where legajo=1;
COMMIT;
--Al momento de ejecutar la instruccion delete tira el siguiente error:
--ERROR: update or delete on "persona" violates foreign key constraint
"fk_telefono_persona_legajo" on "telefono"

se entiende ahora? porque con el insert anda todo bien y con el delete se
produce el error antes de hacer el commit?
muchas gracias.

Nicolas.
PD: Estoy usando postgres 8.1 en Windows XP SP2.

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
To: "Nicolás Domínguez Florit" <ndomin(at)rec(dot)unicen(dot)edu(dot)ar>
Cc: "PostgreSQL list ES" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Tuesday, February 07, 2006 6:33 PM
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Deferrable ¿funciona?

> Nicolás Domínguez Florit escribió:
>
>> begin;
>> SET CONSTRAINTS ALL DEFERRED;
>> delete from a1 where nro_legaj=1;
>> ...
>> .... antes de hacer el commit ya tira el problema...
>
> [...]
>
>> Para mi sorpresa me da error diciendo que no se puede borrar por el
>> constraint que existe. Pero este no esta desactivado hasta el final de la
>> transaccion???
>
> Se supone que si. Por que no pegas un ejemplo completo para ver como
> esta fallando exactamente, y ver si puedo reproducirlo aca? Por favo:
> indica tambien exactamente que version estas usando.
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 5: ¿Has leído nuestro extenso FAQ?
>
> http://www.postgresql.org/files/documentation/faqs/FAQ.html
>
>
> --
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.1.375 / Virus Database: 267.15.2/253 - Release Date: 07/02/2006
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-02-08 12:22:39 Re: Re: [pgsql-es-ayuda] Deferrable ¿funciona?
Previous Message Alvaro Herrera 2006-02-08 12:05:25 Re: Consulta sobre cómo armar estructura de tablas