Hi , I tried "COPY FROM" in the git version. It inserts rows to wrong partition.
step to reproduce: create table t(a int, b int) partition by range(a); create table t_p1 partition of t for values from (1) to (100); create table t_p2 partition of t for values from (100) to (200); create table t_p3 partition of t for values from (200) to (300); insert into t values(1,1); insert into t values(101,101); insert into t values(201,201); copy (select * from t) to '/tmp/test2.txt'; copy t from '/tmp/test2.txt'; select * from t_p1; result: postgres=# select * from t_p1; a | b -----+----- 1 | 1 1 | 1 101 | 101 201 | 201 (4 rows) I think the argument "BulkInsertState" used in CopyFrom/heap_insert is related to this problem. Please check it. Thanks. 2016-12-27 17:30 GMT+08:00 Rajkumar Raghuwanshi < rajkumar.raghuwan...@enterprisedb.com>: > Hi Amit, > > I have pulled latest sources from git and tried to create multi-level > partition, getting a server crash, below are steps to reproduce. please > check if it is reproducible in your machine also. > > postgres=# CREATE TABLE test_ml (a int, b int, c varchar) PARTITION BY > RANGE(a); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p1 PARTITION OF test_ml FOR VALUES FROM > (0) TO (250) PARTITION BY RANGE (b); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p1_p1 PARTITION OF test_ml_p1 FOR VALUES > FROM (0) TO (100); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p1_p2 PARTITION OF test_ml_p1 FOR VALUES > FROM (100) TO (250); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p2 PARTITION OF test_ml FOR VALUES FROM > (250) TO (500) PARTITION BY RANGE (c); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p2_p1 PARTITION OF test_ml_p2 FOR VALUES > FROM ('0250') TO ('0400'); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p2_p2 PARTITION OF test_ml_p2 FOR VALUES > FROM ('0400') TO ('0500'); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p3 PARTITION OF test_ml FOR VALUES FROM > (500) TO (600) PARTITION BY RANGE ((b + a)); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p3_p1 PARTITION OF test_ml_p3 FOR VALUES > FROM (1000) TO (1100); > CREATE TABLE > postgres=# CREATE TABLE test_ml_p3_p2 PARTITION OF test_ml_p3 FOR VALUES > FROM (1100) TO (1200); > CREATE TABLE > postgres=# INSERT INTO test_ml SELECT i, i, to_char(i, 'FM0000') FROM > generate_series(0, 599, 2) i; > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > > Thanks & Regards, > Rajkumar Raghuwanshi > QMG, EnterpriseDB Corporation > > > -- GaoZengqi pgf...@gmail.com zengqi...@gmail.com