Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Alvaro HerreraDate: 2007-12-31 01:25:16
Subject: Re: problema con tildes
Previous:From: Alvaro HerreraDate: 2007-12-30 20:50:49
Subject: Re: Depurar Funciones step to step.

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group