Thread
-
Possible bug in referential integrity system
Richard Ellis <rellis@erols.com> — 2000-09-02T06:04:33Z
The submit button on the form located at http://www.postgresql.org/bugs/bugs.php?1 results in a report of a parsing error, so I'm sending this here as the alternative. Is the following a bug in the referential integrity system? This is for PG 7.0.0. I realize that declaring the "ref" column in t2 additionally as "not null" would prevent this. However, why does the "references" check allow insertion of a null value into t2 when there are no corresponding null value in the num column of t1? If this is actually fixed in 7.0.2, then please accept my apologies. =============== => create table t1 (num int4, name text); CREATE => create table t2 (ref int4 references t1 (num), val text); NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s) CREATE => insert into t1 values (1, 'Widget1'); INSERT 17518650 1 => insert into t2 values ( (select num from t1 where name = 'Widget1'), 'Valuable'); INSERT 17518651 1 => insert into t2 values ( (select num from t1 where name = 'widget2'), 'Bug?'); INSERT 17518652 1 => select * from t2; ref | val -----+---------- 1 | Valuable | Bug? (2 rows) => select * from t2 where ref is null; ref | val -----+------ | Bug? (1 row) -- Microsoft is not the answer. Boycott Microsoft Home page Microsoft is the question. http://www0.vcnet.com/bms No is the answer. Microsoft: Bringing you ten-year old technology, tomorrow, maybe. -
Re: Possible bug in referential integrity system
Alexei E Korneyev <alexei@niva.sposad.ru> — 2000-09-06T05:42:59Z
Hello! Keys phrase 'NOT NULL' simple=# create table t1 (num int4 PRIMARY KEY, name text); NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 't1_pkey' for table 't1' CREATE simple=# create table t2 (ref int4 references t1 (num) NOT NULL, val text); NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s) CREATE simple=# insert into t1 values (1, 'Widget1'); INSERT 80324 1 simple=# insert into t2 values ( (select num from t1 where name = 'widget2'), 'Bug?'); ERROR: ExecAppend: Fail to add null value in not null attribute ref > => create table t1 (num int4, name text); > CREATE > => create table t2 (ref int4 references t1 (num), val text); > NOTICE: CREATE TABLE will create implicit trigger(s) for FOREIGN KEY check(s) > CREATE > > => insert into t1 values (1, 'Widget1'); > INSERT 17518650 1 > > => insert into t2 values ( (select num from t1 where name = 'Widget1'), 'Valuable'); > INSERT 17518651 1 > => insert into t2 values ( (select num from t1 where name = 'widget2'), 'Bug?'); > INSERT 17518652 1 Alexei E. Korneyev alexei@niva.sposad.ru
-
Re: Possible bug in referential integrity system
Stephan Szabo <sszabo@megazone23.bigpanda.com> — 2000-09-06T16:40:56Z
Actually, this is what the spec defines. You're using match unspecified, which means: - If no <match type> was specified then, for each row R1 of the referencing table, either at least one of the values of the referencing columns in R1 shall be a null value, or the value of each referencing column in R1 shall be equal to the value of the corresponding referenced column in some row of the referenced table. Stephan Szabo sszabo@bigpanda.com On Sat, 2 Sep 2000, Richard Ellis wrote: > The submit button on the form located at > http://www.postgresql.org/bugs/bugs.php?1 results in a report of a > parsing error, so I'm sending this here as the alternative. > > Is the following a bug in the referential integrity system? This is > for PG 7.0.0. I realize that declaring the "ref" column in t2 > additionally as "not null" would prevent this. However, why does the > "references" check allow insertion of a null value into t2 when there > are no corresponding null value in the num column of t1? > > If this is actually fixed in 7.0.2, then please accept my apologies.