Re: Algo no defini bien ? o fallo FK

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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.