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
>
>
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 |