Re: Referential integrity implementation - bug or user error?

From: missive(at)frontiernet(dot)net (Lee Harr)
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: Referential integrity implementation - bug or user error?
Date: 2002-03-12 01:18:38
Message-ID: slrna8qlmb.4k.missive@whave.frontiernet.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Sun, 10 Mar 2002 23:19:34 +0100, msn <vujadin(at)post(dot)tele(dot)dk> wrote:
> Hi,
>
> Postgres fails to set null values when referenced key is deleted.
>
> I think I will try to explain with this simple example which
> I have tested on my linux box (rhat7.2) running postgres-v7.2.
>
> I have two tables as follows
>
> create table t1 (
> id integer not null primary key
> );
>
> create table t2 (
> id integer not null primary key,
> t1_aid integer,
> t1_bid integer,
> foreign key (t1_aid)
> references t1 (id)
> on delete set null
> on update cascade,
> foreign key (t1_bid)
> references t1 (id)
> on delete set null
> on update cascade
> );
>
> ... and then I add some values as in
>
> msn=# insert into t1 values (1);
> INSERT 16904 1
> msn=# insert into t1 values (2);
> INSERT 16905 1
> msn=# insert into t2 values (1, 1, 1);
> INSERT 16906 1
> msn=# insert into t2 values (2, 2, 2);
> INSERT 16907 1
> msn=# insert into t2 values (3, 1, 2);
> INSERT 16908 1
>
> But then when I try to delete one id from t1 I get this error message.
>
> msn=# delete from t1 where id=1;
> ERROR: <unnamed> referential integrity violation - key referenced from t2
> not found in t1
>
> Why this fails to set columns t1_aid and t1_bid in table t2 to null?
>

I guess it fails because the key it tries to use in t2 (NULL) is not
in t1 (the only keys there are 1 and 2).

You could insert a NULL key in to t1, then it might work...
Though I am not so sure that makes sense.

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message feblec 2002-03-12 01:31:32 SELECT FOR UPDATE
Previous Message Hubert Palme 2002-03-11 22:55:04 Re: Line Numbering in SELRCT Output