I don't understand having both UUID and time stamp in your PK? The first is by 
defn. unique and the second might be. 

Sent from my iPhone

> On Jan 19, 2015, at 6:12 AM, Spiros Ioannou <siv...@inaccess.com> wrote:
> 
> Hello group,
> we have a timeseries table, and we tried to partition it by month (with 
> pg_partman). It seems the query planner always reads all tables regardless of 
> WHERE, except when WHERE is equality.
> 
> the parent table:
> 
> ifms_db=# \dS measurement_events
>               Table "public.measurement_events"
>         Column         |           Type           | Modifiers
> -----------------------+--------------------------+-----------
>  measurement_source_id | uuid                     | not null
>  measurement_time      | timestamp with time zone | not null
>  event_reception_time  | timestamp with time zone | not null
>  measurement_value     | character varying(200)   | not null
>  quality               | character varying(500)   | not null
> Indexes:
>     "measurement_events_pkey" PRIMARY KEY, btree (measurement_source_id, 
> measurement_time)
> Triggers:
>     measurement_events_part_trig BEFORE INSERT ON measurement_events FOR EACH 
> ROW EXECUTE PROCEDURE measurement_events_part_trig_func()
> Number of child tables: 25 (Use \d+ to list them.)
> 
> 
> One of the children tables (2014_3)
> 
> ifms_db=# \dS measurement_events_p2014_03
>           Table "public.measurement_events_p2014_03"
>         Column         |           Type           | Modifiers
> -----------------------+--------------------------+-----------
>  measurement_source_id | uuid                     | not null
>  measurement_time      | timestamp with time zone | not null
>  event_reception_time  | timestamp with time zone | not null
>  measurement_value     | character varying(200)   | not null
>  quality               | character varying(500)   | not null
> Indexes:
>     "measurement_events_p2014_03_pkey" PRIMARY KEY, btree 
> (measurement_source_id, measurement_time)
> Check constraints:
>     "measurement_events_p2014_03_partition_check" CHECK (measurement_time >= 
> '2014-03-01 00:00:00+02'::timestamp with time zone AND measurement_time < 
> '2014-04-01 00:00:00+03'::timestamp with time zone)
> Inherits: measurement_events
> 
> 
> 
> The query:
> # explain analyze  select * from measurement_events where 
> measurement_source_id='df86917e-8df0-11e1-8f8f-525400e76ceb' AND 
> measurement_time >= DATE '2015-01-01' limit 1;
> 
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>  Limit  (cost=0.00..4.12 rows=1 width=87) (actual time=0.377..0.377 rows=1 
> loops=1)
>    ->  Append  (cost=0.00..2696.08 rows=655 width=87) (actual 
> time=0.376..0.376 rows=1 loops=1)
>          ->  Seq Scan on measurement_events  (cost=0.00..0.00 rows=1 
> width=966) (actual time=0.001..0.001 rows=0 loops=1)
>                Filter: ((measurement_time >= '2015-01-01'::date) AND 
> (measurement_source_id = 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid))
>          ->  Index Scan using measurement_events_p2014_01_pkey on 
> measurement_events_p2014_01  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.005..0.005 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_02_pkey on 
> measurement_events_p2014_02  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.002..0.002 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_03_pkey on 
> measurement_events_p2014_03  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.002..0.002 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_04_pkey on 
> measurement_events_p2014_04  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.001..0.001 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_05_pkey on 
> measurement_events_p2014_05  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.001..0.001 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_06_pkey on 
> measurement_events_p2014_06  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.002..0.002 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_07_pkey on 
> measurement_events_p2014_07  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.001..0.001 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_08_pkey on 
> measurement_events_p2014_08  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.002..0.002 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_09_pkey on 
> measurement_events_p2014_09  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.001..0.001 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_10_pkey on 
> measurement_events_p2014_10  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.001..0.001 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_11_pkey on 
> measurement_events_p2014_11  (cost=0.14..8.16 rows=1 width=966) (actual 
> time=0.002..0.002 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2014_12_pkey on 
> measurement_events_p2014_12  (cost=0.28..8.04 rows=1 width=51) (actual 
> time=0.009..0.009 rows=0 loops=1)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Bitmap Heap Scan on measurement_events_p2015_01  
> (cost=31.02..2500.30 rows=630 width=54) (actual time=0.345..0.345 rows=1 
> loops=1)
>                Recheck Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>                ->  Bitmap Index Scan on measurement_events_p2015_01_pkey  
> (cost=0.00..30.87 rows=630 width=0) (actual time=0.269..0.269 rows=718 
> loops=1)
>                      Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2015_02_pkey on 
> measurement_events_p2015_02  (cost=0.14..8.16 rows=1 width=966) (never 
> executed)
>                Index Cond: ((measurement_source_id = 
> 'df86917e-8df0-11e1-8f8f-525400e76ceb'::uuid) AND (measurement_time >= 
> '2015-01-01'::date))
>          ->  Index Scan using measurement_events_p2015_03_pkey on 
> measurement_events_p2015_03  (cost=0.14..8.16 rows=1 width=966) (never 
> executed)
> .....
> 
> More results:
> 
> This query:
> ifms_db=# explain analyze  select * from measurement_events where 
> measurement_source_id='bd77387a-fdb4-4531-9bb7-7ef67a8f647d' AND 
> measurement_time = DATE  '2015-01-14 15:30:01+02'   limit 1;
> 
> searches in all tables:
> 
> This query (no date casting):
> ifms_db=# explain analyze  select * from measurement_events where 
> measurement_source_id='bd77387a-fdb4-4531-9bb7-7ef67a8f647d' AND 
> measurement_time =  '2015-01-14 15:30:01+02'   limit 1;
> 
> searches only 1 table,
> 
> and this query (>, no casting):
> ifms_db=# explain analyze  select * from measurement_events where 
> measurement_source_id='bd77387a-fdb4-4531-9bb7-7ef67a8f647d' AND 
> measurement_time >  '2015-01-14 15:30:01+02'   limit 1;
> 
> searches first the correct table, then all the others.
> 
> any ideas?
> 
> 
> 

Reply via email to