Howdy,

Environment:

Postgres 8.4.15
Ubuntu 10.04.4

We have multiple monthly tables inherited from a master.  Sample definition:

--
-- Name: syslog_master; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--

CREATE TABLE syslog_master (
    ip inet,
    facility character varying(10),
    level character varying(10),
    datetime timestamp without time zone,
    program character varying(25),
    msg text,
    seq bigint NOT NULL
);

--
-- Name: syslog_201008; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--

CREATE TABLE syslog_201008 (CONSTRAINT syslog_201008_datetime_check CHECK 
(((datetime >= '2010-08-01'::date) AND (datetime < '2010-09-01'::date)))
)
INHERITS (syslog_master);

We have a query that hits all tables when it should be only looking at the last 
10 minutes:

SELECT msg
FROM syslog
WHERE ip = '150.101.0.140'
AND msg LIKE '%218.244.147.129%'
AND datetime > NOW() - INTERVAL '10 minutes';

nms=# explain analyze SELECT msg
nms-# FROM syslog
nms-# WHERE ip = '150.101.0.140'
nms-# AND msg LIKE '%218.244.147.129%'
nms-# AND datetime > NOW() - INTERVAL '10 minutes';
                                                                                
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Result  (cost=4.27..5705.32 rows=35 width=117) (actual time=304.528..304.528 
rows=0 loops=1)
   ->  Append  (cost=4.27..5705.32 rows=35 width=117) (actual 
time=304.528..304.528 rows=0 loops=1)
         ->  Bitmap Heap Scan on syslog_master  (cost=4.27..9.63 rows=1 
width=32) (actual time=0.012..0.012 rows=0 loops=1)
               Recheck Cond: (ip = '150.101.0.140'::inet)
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (datetime > 
(now() - '00:10:00'::interval)))
               ->  Bitmap Index Scan on syslog_master_ip_idx  (cost=0.00..4.27 
rows=2 width=0) (actual time=0.010..0.010 rows=0 loops=1)
                     Index Cond: (ip = '150.101.0.140'::inet)
         ->  Index Scan using syslog_201008_datetime_idx on syslog_201008 
syslog_master  (cost=0.00..39.13 rows=1 width=122) (actual 
time=111.534..111.534 rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201009_datetime_idx on syslog_201009 
syslog_master  (cost=0.00..235.34 rows=1 width=129) (actual time=0.719..0.719 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201010_datetime_idx on syslog_201010 
syslog_master  (cost=0.00..586.48 rows=1 width=127) (actual time=0.710..0.710 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201011_datetime_idx on syslog_201011 
syslog_master  (cost=0.00..130.45 rows=1 width=128) (actual time=14.916..14.916 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201012_datetime_idx on syslog_201012 
syslog_master  (cost=0.00..56.77 rows=1 width=125) (actual time=22.792..22.792 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201101_datetime_idx on syslog_201101 
syslog_master  (cost=0.00..11.80 rows=1 width=126) (actual time=0.669..0.669 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201102_datetime_idx on syslog_201102 
syslog_master  (cost=0.00..30.49 rows=1 width=121) (actual time=0.705..0.705 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201103_datetime_idx on syslog_201103 
syslog_master  (cost=0.00..32.32 rows=1 width=123) (actual time=8.463..8.463 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201104_datetime_idx on syslog_201104 
syslog_master  (cost=0.00..262.22 rows=1 width=124) (actual time=0.794..0.794 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201105_datetime_idx on syslog_201105 
syslog_master  (cost=0.00..119.54 rows=1 width=122) (actual time=0.606..0.606 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201106_datetime_idx on syslog_201106 
syslog_master  (cost=0.00..32.49 rows=1 width=109) (actual time=16.159..16.159 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201107_datetime_idx on syslog_201107 
syslog_master  (cost=0.00..37.21 rows=1 width=118) (actual time=0.757..0.757 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201108_datetime_idx on syslog_201108 
syslog_master  (cost=0.00..467.15 rows=1 width=132) (actual time=2.050..2.050 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
         ->  Index Scan using syslog_201109_datetime_idx on syslog_201109 
syslog_master  (cost=0.00..315.72 rows=1 width=121) (actual time=1.505..1.505 
rows=0 loops=1)
               Index Cond: (datetime > (now() - '00:10:00'::interval))
               Filter: ((msg ~~ '%218.244.147.129%'::text) AND (ip = 
'150.101.0.140'::inet))
:

And so on...

We have tried dropping the constrainst and re-creating casting the check to 
timestamp rather than date but no change.

Any ideas?

Thank you,

Samuel Stearns

Reply via email to