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