mirror of
https://github.com/postgres/postgres.git
synced 2025-12-12 02:37:31 +03:00
Turns out new IN implementation has got some problems in an UPDATE or
DELETE with inherited target table. Fix it; add a regression test. Also, correct ancient misspelling of 'inherited'.
This commit is contained in:
@@ -539,3 +539,34 @@ CREATE TEMP TABLE z (b TEXT, PRIMARY KEY(aa, b)) inherits (a);
|
||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'z_pkey' for table 'z'
|
||||
INSERT INTO z VALUES (NULL, 'text'); -- should fail
|
||||
ERROR: ExecInsert: Fail to add null value in not null attribute aa
|
||||
-- Check UPDATE with inherited target and an inherited source table
|
||||
create temp table foo(f1 int, f2 int);
|
||||
create temp table foo2(f3 int) inherits (foo);
|
||||
create temp table bar(f1 int, f2 int);
|
||||
create temp table bar2(f3 int) inherits (bar);
|
||||
insert into foo values(1,1);
|
||||
insert into foo values(3,3);
|
||||
insert into foo2 values(2,2,2);
|
||||
insert into foo2 values(3,3,3);
|
||||
insert into bar values(1,1);
|
||||
insert into bar values(2,2);
|
||||
insert into bar values(3,3);
|
||||
insert into bar values(4,4);
|
||||
insert into bar2 values(1,1,1);
|
||||
insert into bar2 values(2,2,2);
|
||||
insert into bar2 values(3,3,3);
|
||||
insert into bar2 values(4,4,4);
|
||||
update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
|
||||
SELECT relname, bar.* FROM bar, pg_class where bar.tableoid = pg_class.oid;
|
||||
relname | f1 | f2
|
||||
---------+----+-----
|
||||
bar | 4 | 4
|
||||
bar | 1 | 101
|
||||
bar | 2 | 102
|
||||
bar | 3 | 103
|
||||
bar2 | 4 | 4
|
||||
bar2 | 1 | 101
|
||||
bar2 | 2 | 102
|
||||
bar2 | 3 | 103
|
||||
(8 rows)
|
||||
|
||||
|
||||
@@ -96,3 +96,26 @@ SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
|
||||
-- Confirm PRIMARY KEY adds NOT NULL constraint to child table
|
||||
CREATE TEMP TABLE z (b TEXT, PRIMARY KEY(aa, b)) inherits (a);
|
||||
INSERT INTO z VALUES (NULL, 'text'); -- should fail
|
||||
|
||||
-- Check UPDATE with inherited target and an inherited source table
|
||||
create temp table foo(f1 int, f2 int);
|
||||
create temp table foo2(f3 int) inherits (foo);
|
||||
create temp table bar(f1 int, f2 int);
|
||||
create temp table bar2(f3 int) inherits (bar);
|
||||
|
||||
insert into foo values(1,1);
|
||||
insert into foo values(3,3);
|
||||
insert into foo2 values(2,2,2);
|
||||
insert into foo2 values(3,3,3);
|
||||
insert into bar values(1,1);
|
||||
insert into bar values(2,2);
|
||||
insert into bar values(3,3);
|
||||
insert into bar values(4,4);
|
||||
insert into bar2 values(1,1,1);
|
||||
insert into bar2 values(2,2,2);
|
||||
insert into bar2 values(3,3,3);
|
||||
insert into bar2 values(4,4,4);
|
||||
|
||||
update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
|
||||
|
||||
SELECT relname, bar.* FROM bar, pg_class where bar.tableoid = pg_class.oid;
|
||||
|
||||
Reference in New Issue
Block a user