From: | "David West" <david(dot)west(at)cusppoint(dot)com> |
---|---|
To: | <pgsql-general(at)postgresql(dot)org> |
Subject: | hash partitioning |
Date: | 2008-09-03 16:24:09 |
Message-ID: | 001201c90de1$7f131710$7d394530$@west@cusppoint.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi folks,
I'm wondering why the postgres planner is not capable of determining the
correct partition for a simple select for the following partitioning scheme,
in which I'd like to automatically divide rows into four sub-tables, ie, a
simple form of hash partitioning.
Any ideas why this doesn't work, or a work around to make it work? I would
have expected the query plan below to only query the test_1 table.
Regards
David
CREATE TABLE test (
id int not null primary key
);
CREATE TABLE test_0 ( CHECK ( id % 4 = 0) ) INHERITS (test);
CREATE TABLE test_1 ( CHECK ( id % 4 = 1) ) INHERITS (test);
CREATE TABLE test_2 ( CHECK ( id % 4 = 2) ) INHERITS (test);
CREATE TABLE test_3 ( CHECK ( id % 4 = 3) ) INHERITS (test);
CREATE RULE test_0 AS ON INSERT TO test WHERE ( id % 4 = 0 ) DO INSTEAD
INSERT INTO test_0 VALUES ( NEW.id );
CREATE RULE test_1 AS ON INSERT TO test WHERE ( id % 4 = 1 ) DO INSTEAD
INSERT INTO test_1 VALUES ( NEW.id );
CREATE RULE test_2 AS ON INSERT TO test WHERE ( id % 4 = 2 ) DO INSTEAD
INSERT INTO test_2 VALUES ( NEW.id );
CREATE RULE test_3 AS ON INSERT TO test WHERE ( id % 4 = 3 ) DO INSTEAD
INSERT INTO test_3 VALUES ( NEW.id );
insert into test values(1);
explain analyse select * from test;
"Result (cost=0.00..170.00 rows=12000 width=4) (actual time=0.027..0.042
rows=1 loops=1)"
" -> Append (cost=0.00..170.00 rows=12000 width=4) (actual
time=0.020..0.032 rows=1 loops=1)"
" -> Seq Scan on test (cost=0.00..34.00 rows=2400 width=4) (actual
time=0.002..0.002 rows=0 loops=1)"
" -> Seq Scan on test_0 test (cost=0.00..34.00 rows=2400 width=4)
(actual time=0.001..0.001 rows=0 loops=1)"
" -> Seq Scan on test_1 test (cost=0.00..34.00 rows=2400 width=4)
(actual time=0.007..0.009 rows=1 loops=1)"
" -> Seq Scan on test_2 test (cost=0.00..34.00 rows=2400 width=4)
(actual time=0.001..0.001 rows=0 loops=1)"
" -> Seq Scan on test_3 test (cost=0.00..34.00 rows=2400 width=4)
(actual time=0.001..0.001 rows=0 loops=1)"
"Total runtime: 0.115 ms"
From | Date | Subject | |
---|---|---|---|
Next Message | Scott Marlowe | 2008-09-03 16:53:40 | Re: Oracle and Postgresql |
Previous Message | Fco. Mario Barcala Rodríguez | 2008-09-03 16:21:59 | Case sensitive full text searching |