Search Postgresql Archives

Constraint exclusion for timestamp expression

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

 



Greetings.

I have a partitioned table, that can be reproduced the following way:

CREATE TABLE ara (
    ara_id      int4,
    name        varchar(11),
    run_id      int4,
    set_id      int4,
    created_at  timestamp,
    CONSTRAINT p_ara PRIMARY KEY (ara_id)
);
DO $partition$
DECLARE
    _tab    text;
    _mon    timestamp;
BEGIN
    FOR _mon IN
        SELECT * FROM generate_series('2013-10-01'::timestamp, date_trunc('mon',now()+interval'2mon'),interval'1mon') s(dt)
    LOOP
        _tab:='ara_'||to_char(_mon, 'YYYYMM');
        RAISE NOTICE '..oO( Creating % )', _tab;
        EXECUTE format($$CREATE TABLE %I (CONSTRAINT c_ara_partition CHECK (created_at >= %L AND created_at < %L)) INHERITS (ara)$$,
                             _tab, _mon, (_mon+interval'1mon'));
        EXECUTE format($$CREATE UNIQUE INDEX p_%s ON %I(ara_id)$$, _tab, _tab);
        EXECUTE format($$CREATE INDEX i_%s_name ON %I(name)$$, _tab, _tab);
        EXECUTE format($$CREATE INDEX i_%s_run_and_name ON %I(run_id,name)$$, _tab, _tab);
    END LOOP;

END;
$partition$;


Now, if I check plan for this query:

EXPLAIN SELECT * FROM ara
 WHERE ara.created_at
       BETWEEN (current_timestamp-interval'90 days')::timestamp
           AND (current_timestamp)::timestamp;

I can see that all partitions are considered by the planner.

If I replace the interval _expression_ with constant, like this:

EXPLAIN SELECT * FROM ara
 WHERE ara.created_at
       BETWEEN '2014-02-20'::timestamp
           AND (current_timestamp)::timestamp;

then partition pruning kicks in and skips outdated partitions. The same happens for the future-dated partitions if I use a constant timestamp for the upper limit.

`constraint_exclusion` is default: partition

This happens on 9.1.13, but I get the same plans also on 9.3.4.


How can I enforce pruning to kick in for the initial expressions?



--
Victor Y. Yegorov

[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