Re: Partitionement

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Pierre BOIZOT <pierre(dot)boizot(at)gmail(dot)com>
Cc: PG-Mail-liste <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Partitionement
Date: 2013-10-05 16:00:31
Message-ID: 1380988831.2604.9.camel@localhost.localdomain
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

On Sat, 2013-10-05 at 07:24 +0200, Pierre BOIZOT wrote:
> hello,
>
> oui oui le code ne provient pas des articles.
>
> c'est un extrait de code du cas qui m'occupe.
>
> Les clause de contrainte de la partition.
>
> Donc le partitionnement est fait sur un code et un interval de date.
>
> La table a 380 partition et en aura à terme 750 environs.
>
> Les requètes sont un peu lentes :-( + de 30 secondes.
>
> je recherche la cause ....
>
> la parametre contraint_exclusion est bien à on .
> malgré cela le plan cherche à parcourir toutes les partition de la table.
>
> d'ou ma question sur la relation entre les contraintes de la tables et
> les restrictions de la clause where.
>
> Y a t il une régle enoncée dans la documentation...
>
> s'il y a une différence entre contrainte et clause where cela
> revient il à intéroger la table sans les contraintes ?
>
> Je vais me faire un petit test pour explorer cela.
>
> ma question avait pour but de comprendre s'il y a des régles précises
> le point 5.9.4 et 5.9.6. de la documentation ne dit pas comment se
> comporte l'exclusion de contrainte dans le cas ou la clause where ne
> comporte pas toutes les colonnes déclarées dans la contrainte de la
> table.
>

J'avoue que je ne sais pas. Monter un test ne devrait pas être très
compliqué :

pierre=# create table parent (id integer, c1 integer, c2 integer);
CREATE TABLE
pierre=# create table fille1(check (c1>0 and c1<=10 and c2<50))
inherits(parent);
CREATE TABLE
pierre=# create table fille2(check (c1>10 and c1<=20 and c2>=50))
inherits(parent);
CREATE TABLE
pierre=# insert into fille1 select i+1, i+1, i*5
from generate_series(0, 9) as i;
INSERT 0 10
pierre=# insert into fille2 select i+10, i+10, i*50
from generate_series(1, 10) as i;
INSERT 0 10
pierre=# explain select * from parent where c1<5;
QUERY PLAN
----------------------------------------------------------------
Append (cost=0.00..34.25 rows=648 width=12)
-> Seq Scan on parent (cost=0.00..0.00 rows=1 width=12)
Filter: (c1 < 5)
-> Seq Scan on fille1 (cost=0.00..34.25 rows=647 width=12)
Filter: (c1 < 5)
(5 rows)

Par contre, qu'on soit bien d'accord, PostgreSQL est assez sensible sur
ce sujet (le partitionnement). Donc attention à son utilisation...

--
Guillaume
http://blog.guillaume.lelarge.info
http://www.dalibo.com

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Guillaume Lelarge 2013-10-05 16:09:49 Re: psql : extension des commandes ...
Previous Message Pierre BOIZOT 2013-10-05 05:24:48 Re: Partitionement