Search Postgresql Archives

Re: Constraint exclusion and overlapping range checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sep 7, 2013, at 6:54, Steve Atkins <steve@xxxxxxxxxxx> wrote:

> On Sep 6, 2013, at 9:37 PM, François Beausoleil <francois@xxxxxxxxxxx> wrote:
> 
>> Le 2013-09-07 à 00:29, Steve Atkins a écrit :
>> 
>>> If I have a partitioned table that has some range constraints that look kinda like they're intended for constraint exclusion, but aren't quite non-overlapping, will that break anything?
>>> 
>>> e.g.
>>> 
>>> create table jan ( …, check(created >= '2013-01-01' and created < '2013-02-01'), check(id >=0 and id < 10000100) ) inherits(foo);
>>> create table feb ( …, check(created >= '2013-02-01' and created < '2013-03-01'), check(id >=1000000 and id < 20000100) ) inherits(foo);
>>> create table mar ( …, check(created >= '2013-03-01' and created < '2013-04-01'), check(id >=2000000 and id < 30000100) ) inherits(foo);
>>> 
>>> Querying by created should be fine, and take advantage of constraint exclusion, but will querying by id work? And if it does work, will it take any advantage of those constraints at all, or just search all the child partitions?
>> 
>> I don't know, but I suspect a quick EXPLAIN ANALYZE will tell you, even with empty tables.
> 
> Explain suggests it'll work fine, and make good use of the constraints to prune partitions from the plan. But the docs are pretty specific about overlapping range constraints being a bad thing so I'm wondering if there's potential for problems.


For values that are in the overlapping parts of the partition, the database will have to look in both table partitions to find a record that you're searching for instead of a single table partition. That partially defeats the purpose of using exclusion constraints.

Next to that, putting data in the tables becomes ambiguous for records that match both constraints - in which table should the records go? That is something that you need to do programatically anyway, so with the knowledge of how to decide which records go where, you could also define your exclusion constraints to not be ambigous.

I don't see any benefit of having ambiguous exclusion constraints - IMHO you're better off fixing them.

Alban Hertroys
--
If you can't see the forest for the trees,
cut the trees and you'll find there is no forest.



-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux