On Tue, May 16, 2017 at 8:57 AM, Jeevan Ladhe <jeevan.la...@enterprisedb.com> wrote: > I have fixed the crash in attached patch. > Also the patch needed bit of adjustments due to recent commit. > I have re-based the patch on latest commit.
+ bool has_default; /* Is there a default partition? Currently false + * for a range partitioned table */ + int default_index; /* Index of the default list partition. -1 for + * range partitioned tables */ Why do we need both has_default and default_index? If default_index == -1 means that there is no default, we don't also need a separate bool to record the same thing, do we? get_qual_for_default() still returns a list of things that are not quals. I think that this logic is all pretty poorly organized. The logic to create a partitioning constraint for a list partition should be part of get_qual_for_list(), whether or not it is a default. And when we have range partitions, the logic to create a default range partitioning constraint should be part of get_qual_for_range(). The code the way it's organized today makes it look like there are three kinds of partitions: list, range, and default. But that's not right at all. There are two kinds: list and range. And a list partition might or might not be a default partition, and similarly for range. + ereport(ERROR, (errcode(ERRCODE_CHECK_VIOLATION), + errmsg("DEFAULT partition cannot be used" + " without negator of operator %s", + get_opname(operoid)))); I don't think ERRCODE_CHECK_VIOLATION is the right error code here, and we have a policy against splitting message strings like this. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers