v2-0001-Remove-unwanted-assert-check-and-a-slight-tweak-t.patch

application/octet-stream

Filename: v2-0001-Remove-unwanted-assert-check-and-a-slight-tweak-t.patch
Type: application/octet-stream
Part: 0
Message: Re: create partition table caused server crashed with self-referencing foreign key

Patch

Format: format-patch
Series: patch v2-0001
Subject: Remove unwanted assert check and a slight tweak to test.
File+
src/backend/commands/tablecmds.c 0 1
src/test/regress/expected/foreign_key.out 4 4
src/test/regress/sql/foreign_key.sql 4 4
From 28fa04ddcb95906e4cab659f2c835e9099219db3 Mon Sep 17 00:00:00 2001
From: Amul Sul <amul.sul@enterprisedb.com>
Date: Wed, 22 Apr 2020 05:42:12 -0400
Subject: [PATCH v2] Remove unwanted assert check and a slight tweak to test.

---
 src/backend/commands/tablecmds.c          | 1 -
 src/test/regress/expected/foreign_key.out | 8 ++++----
 src/test/regress/sql/foreign_key.sql      | 8 ++++----
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 037d457c3d4..5dddc20964f 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -9042,7 +9042,6 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel)
 								   conpfeqop,
 								   conppeqop,
 								   conffeqop);
-		Assert(numfks == attmap->maplen);
 		for (int i = 0; i < numfks; i++)
 			mapped_confkey[i] = attmap->attnums[confkey[i] - 1];
 
diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out
index 07bd5b6434f..039777500d6 100644
--- a/src/test/regress/expected/foreign_key.out
+++ b/src/test/regress/expected/foreign_key.out
@@ -2075,9 +2075,9 @@ drop cascades to table fkpart0.fk_part
 -- attached) after creating the foreign key.
 CREATE SCHEMA fkpart3;
 SET search_path TO fkpart3;
-CREATE TABLE pk (a int PRIMARY KEY) PARTITION BY RANGE (a);
+CREATE TABLE pk (a int PRIMARY KEY, d int) PARTITION BY RANGE (a);
 CREATE TABLE pk1 PARTITION OF pk FOR VALUES FROM (0) TO (1000);
-CREATE TABLE pk2 (b int, a int);
+CREATE TABLE pk2 (b int, a int, d int);
 ALTER TABLE pk2 DROP COLUMN b;
 ALTER TABLE pk2 ALTER a SET NOT NULL;
 ALTER TABLE pk ATTACH PARTITION pk2 FOR VALUES FROM (1000) TO (2000);
@@ -2090,7 +2090,7 @@ ALTER TABLE fk ATTACH PARTITION fk2 FOR VALUES FROM (750) TO (3500);
 CREATE TABLE pk3 PARTITION OF pk FOR VALUES FROM (2000) TO (3000);
 CREATE TABLE pk4 (LIKE pk);
 ALTER TABLE pk ATTACH PARTITION pk4 FOR VALUES FROM (3000) TO (4000);
-CREATE TABLE pk5 (c int, b int, a int NOT NULL) PARTITION BY RANGE (a);
+CREATE TABLE pk5 (c int, b int, a int NOT NULL, d int) PARTITION BY RANGE (a);
 ALTER TABLE pk5 DROP COLUMN b, DROP COLUMN c;
 CREATE TABLE pk51 PARTITION OF pk5 FOR VALUES FROM (4000) TO (4500);
 CREATE TABLE pk52 PARTITION OF pk5 FOR VALUES FROM (4500) TO (5000);
@@ -2116,7 +2116,7 @@ INSERT into fk VALUES (4500);
 ERROR:  insert or update on table "fk3" violates foreign key constraint "fk_a_fkey"
 DETAIL:  Key (a)=(4500) is not present in table "pk".
 -- insert into the referenced table, now they should work
-INSERT into pk VALUES (1), (1000), (2000), (3000), (4000), (4500);
+INSERT into pk(a) VALUES (1), (1000), (2000), (3000), (4000), (4500);
 INSERT into fk VALUES (1), (1000), (2000), (3000), (4000), (4500);
 -- should fail: referencing value present
 DELETE FROM pk WHERE a = 1;
diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql
index c5c9011afcb..c4949e31db9 100644
--- a/src/test/regress/sql/foreign_key.sql
+++ b/src/test/regress/sql/foreign_key.sql
@@ -1483,9 +1483,9 @@ drop schema fkpart0, fkpart1, fkpart2, fkpart3 cascade;
 CREATE SCHEMA fkpart3;
 SET search_path TO fkpart3;
 
-CREATE TABLE pk (a int PRIMARY KEY) PARTITION BY RANGE (a);
+CREATE TABLE pk (a int PRIMARY KEY, d int) PARTITION BY RANGE (a);
 CREATE TABLE pk1 PARTITION OF pk FOR VALUES FROM (0) TO (1000);
-CREATE TABLE pk2 (b int, a int);
+CREATE TABLE pk2 (b int, a int, d int);
 ALTER TABLE pk2 DROP COLUMN b;
 ALTER TABLE pk2 ALTER a SET NOT NULL;
 ALTER TABLE pk ATTACH PARTITION pk2 FOR VALUES FROM (1000) TO (2000);
@@ -1501,7 +1501,7 @@ CREATE TABLE pk3 PARTITION OF pk FOR VALUES FROM (2000) TO (3000);
 CREATE TABLE pk4 (LIKE pk);
 ALTER TABLE pk ATTACH PARTITION pk4 FOR VALUES FROM (3000) TO (4000);
 
-CREATE TABLE pk5 (c int, b int, a int NOT NULL) PARTITION BY RANGE (a);
+CREATE TABLE pk5 (c int, b int, a int NOT NULL, d int) PARTITION BY RANGE (a);
 ALTER TABLE pk5 DROP COLUMN b, DROP COLUMN c;
 CREATE TABLE pk51 PARTITION OF pk5 FOR VALUES FROM (4000) TO (4500);
 CREATE TABLE pk52 PARTITION OF pk5 FOR VALUES FROM (4500) TO (5000);
@@ -1517,7 +1517,7 @@ INSERT into fk VALUES (3000);
 INSERT into fk VALUES (4000);
 INSERT into fk VALUES (4500);
 -- insert into the referenced table, now they should work
-INSERT into pk VALUES (1), (1000), (2000), (3000), (4000), (4500);
+INSERT into pk(a) VALUES (1), (1000), (2000), (3000), (4000), (4500);
 INSERT into fk VALUES (1), (1000), (2000), (3000), (4000), (4500);
 
 -- should fail: referencing value present
-- 
2.18.0