From: | "Jaime Casanova" <systemguards(at)gmail(dot)com> |
---|---|
To: | "Gabriel Hermes Colina Zambra" <hermeszambra(at)yahoo(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Algo no defini bien ? o fallo FK |
Date: | 2007-12-30 20:53:23 |
Message-ID: | c2d9e70e0712301253l2cae0b36n49491d66e8e529d6@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Dec 29, 2007 10:32 PM, Gabriel Hermes Colina Zambra
<hermeszambra(at)yahoo(dot)com> wrote:
> CONSTRAINT "documentos_id_cab_fkey" FOREIGN KEY
> ("id_cab")
> REFERENCES "central"."cabezales"("id_cab")
> MATCH FULL
> ON DELETE CASCADE
> ON UPDATE CASCADE
> NOT DEFERRABLE,
>
>
> En esta situacion encontre que en cabezales no estaba
> el registro a los que hacia referencia la tabla
> central_documentos que tiene la llave foranea
> apuntando a central.cabezales, los 14 registros tenian
> el id_cab nulos, y pertenecian todos a una fecha dada,
> lo descubri pasando un backup de fedora a un windows y
> pense que podria estar el problema en el postgresql de
> windows, pero al fijarme en el postgresql de fedora me
> encontre con la misma realidad, no habia ningun
> registro en cabezales con id_cab=null y en documentos
> estaban los mismos 14 registros.
>
de lo que entendi es que en el detalle tienes registros con valor NULL
cuando esperabas que fuera un id de la cabecera, lo que paso es que
debiste declarar la columna como NOT NULL. De lo contrario el valor
NULL se puede asignar libremente para indicar que no hay cabecera...
eso es intencional y, si mal no recuerdo, se conforma al estándar
SQL... a parte de que tiene sus usos...
prueba=# create table t1_cab (i int primary key);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_cab_pkey" for
table "t1_cab"
CREATE TABLE
prueba=# insert into t1_cab select generate_series(1, 10);
INSERT 0 10
prueba=# create table t1_det1 (i int references t1_cab(i));
CREATE TABLE
prueba=# insert into t1_det1 values (1);
INSERT 0 1
prueba=# insert into t1_det1 values (null);
INSERT 0 1
prueba=# create table t1_det2 (i int not null references t1_cab(i));
CREATE TABLE
prueba=# insert into t1_det2 values (1);
INSERT 0 1
prueba=# insert into t1_det2 values (null);
ERROR: null value in column "i" violates not-null constraint
prueba=#
--
Atentamente,
Jaime Casanova
"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2007-12-31 01:25:16 | Re: problema con tildes |
Previous Message | Alvaro Herrera | 2007-12-30 20:50:49 | Re: Depurar Funciones step to step. |