On Wed, May 17, 2017 at 6:54 PM, Ashutosh Bapat <ashutosh.ba...@enterprisedb.com> wrote: [...]
> > Comments on the tests > +#ifdef USE_ASSERT_CHECKING > + { > + /* > + * Hash partition bound stores modulus and remainder at > + * b1->datums[i][0] and b1->datums[i][1] position respectively. > + */ > + for (i = 0; i < b1->ndatums; i++) > + Assert((b1->datums[i][0] == b2->datums[i][0] && > + b1->datums[i][1] == b2->datums[i][1])); > + } > +#endif > Why do we need extra {} here? > Okay, removed in the attached version. > Comments on testcases > +CREATE TABLE hpart_1 PARTITION OF hash_parted FOR VALUES WITH > (modulus 8, remainder 0); > +CREATE TABLE fail_part (LIKE hpart_1 INCLUDING CONSTRAINTS); > +ALTER TABLE hash_parted ATTACH PARTITION fail_part FOR VALUES WITH > (modulus 4, remainder 0); > Probably you should also test the other-way round case i.e. create modulus 4, > remainder 0 partition and then try to add partitions with modulus 8, remainder > 4 and modulus 8, remainder 0. That should fail. > Fixed. > Why to create two tables hash_parted and hash_parted2, you should be able to > test with only a single table. > Fixed. > +INSERT INTO hpart_2 VALUES (3, 'a'); > +DELETE FROM hpart_2; > +INSERT INTO hpart_5_a (a, b) VALUES (6, 'a'); > This is slightly tricky. On different platforms the row may map to different > partitions depending upon how the values are hashed. So, this test may not be > portable on all the platforms. Probably you should add such testcases with a > custom hash operator class which is identity function as suggested by Robert. > This also applies to the tests in insert.sql and update.sql for partitioned > table without custom opclass. > Yes, you are correct. Fixed in the attached version. > +-- delete the faulting row and also add a constraint to skip the scan > +ALTER TABLE hpart_5 ADD CONSTRAINT hcheck_a CHECK (a IN (5)), ALTER a > SET NOT NULL; > The constraint is not same as the implicit constraint added for that > partition. > I am not sure whether it's really going to avoid the scan. Did you verify it? > If yes, then how? > I haven't tested that, may be I've copied blindly, sorry about that. I don't think this test is needed again for hash partitioning, so removed. > +ALTER TABLE hash_parted2 ATTACH PARTITION fail_part FOR VALUES WITH > (modulus 3, remainder 2); > +ERROR: every hash partition modulus must be a factor of the next > larger modulus > We should add this test with at least two partitions in there so that we can > check lower and upper modulus. Also, testing with some interesting > bounds discussed earlier > in this mail e.g. adding modulus 15 when 5, 10, 60 exist will be better than > testing with 3, 4 and 8. > Similar test do exists in create_table.sql file. > +ERROR: cannot use collation for hash partition key column "a" > This seems to indicate that we can not specify collation for hash partition > key > column, which isn't true. Column a here can have its collation. What's not > allowed is specifying collation in PARTITION BY clause. > May be reword the error as "cannot use collation for hash partitioning". or > plain "cannot use collation in PARTITION BY clause for hash partitioning". > > +ERROR: invalid bound specification for a list partition > +LINE 1: CREATE TABLE fail_part PARTITION OF list_parted FOR VALUES W... > + ^ > Should the location for this error be that of WITH clause like in case of > range > and list partitioned table. > Fixed. > +select tableoid::regclass as part, a from hash_parted order by part; > May be add a % 4 to show clearly that the data really goes to the partitioning > with that remainder. > Fixed. Updated patch attached. 0001-patch rebased against latest head. 0002-patch also incorporates code comments and error message changes as per Robert's & your suggestions. Thanks ! Regards, Amul
0001-Cleanup_v3.patch
Description: Binary data
0002-hash-partitioning_another_design-v10.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers