Received: from localhost (maia-3.hub.org [200.46.204.184]) by postgresql.org (Postfix) with ESMTP id 9BB9C9FA0FB for ; Sat, 16 Dec 2006 10:49:23 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.184]) (amavisd-new, port 10024) with ESMTP id 34913-01 for ; Sat, 16 Dec 2006 10:48:58 -0400 (AST) X-Greylist: delayed 00:18:42.767459 by SQLgrey-1.7.4 Received: from svr4.postgresql.org (svr4.postgresql.org [66.98.251.159]) by postgresql.org (Postfix) with ESMTP id 8DFDE9FA433 for ; Sat, 16 Dec 2006 10:48:48 -0400 (AST) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.3 Received: from smtp4.poczta.interia.pl (smtp10.poczta.interia.pl [80.48.65.10]) by svr4.postgresql.org (Postfix) with ESMTP id 908D05AF8CA for ; Sat, 16 Dec 2006 14:30:04 +0000 (GMT) Received: by smtp4.poczta.interia.pl (INTERIA.PL, from userid 502) id 57CAF376C29; Sat, 16 Dec 2006 15:29:55 +0100 (CET) Received: from poczta.interia.pl (mi01.poczta.interia.pl [10.217.12.1]) by smtp4.poczta.interia.pl (INTERIA.PL) with ESMTP id F2B57376BE9 for ; Sat, 16 Dec 2006 15:29:54 +0100 (CET) Received: by poczta.interia.pl (INTERIA.PL, from userid 502) id B72AE27008E; Sat, 16 Dec 2006 15:29:51 +0100 (CET) Received: from [192.168.1.101] (nomad.net.autocom.pl [213.134.176.226]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by www.poczta.fm (INTERIA.PL) with ESMTP id 8DDA4270080 for ; Sat, 16 Dec 2006 15:29:44 +0100 (CET) Message-ID: <458402D4.7080500@poczta.fm> Date: Sat, 16 Dec 2006 15:29:40 +0100 From: jamcito User-Agent: Thunderbird 1.5.0.8 (X11/20061203) MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: partition text/varchar check problem Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-EMID: f6ed6138 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.957 tagged_above=0 required=5 tests=BAYES_40, SPF_FAIL, UPPERCASE_25_50 X-Spam-Level: X-Archive-Number: 200612/435 X-Sequence-Number: 22491 Hello, I am trying to make partitions: CREATE SEQUENCE data_seq; CREATE TABLE data ( identyf bigint, name varchar, added timestamp default now() ); /*********************************************/ CREATE TABLE data_a (CHECK (name LIKE varchar 'a%') ) INHERITS (data); -- CREATE TABLE data_b (CHECK (name LIKE varchar 'b%') ) INHERITS (data); /*********************************************/ CREATE INDEX data_a_idx ON data_a(name); CREATE INDEX data_b_idx ON data_b(name); /*********************************************/ CREATE RULE data_insert_a AS ON INSERT TO data WHERE (name LIKE 'a%') DO INSTEAD INSERT INTO data_a(identyf,name) VALUES (nextval('data_seq'),NEW.name); -- CREATE RULE data_insert_b AS ON INSERT TO data WHERE (name LIKE 'b%') DO INSTEAD INSERT INTO data_b(identyf,name) VALUES (nextval('data_seq'),NEW.name); I put some data and vacuum: /*********************************************/ INSERT INTO data(name) VALUES ('aaa'); INSERT INTO data(name) VALUES ('aab'); INSERT INTO data(name) VALUES ('baa'); INSERT INTO data(name) VALUES ('bab'); VACUUM ANALYZE data_a; VACUUM ANALYZE data_b; /*********************************************/ SET constraint_exclusion=off; SET EXPLAIN SELECT * FROM data WHERE name = 'aaa'; QUERY PLAN ------------------------------------------------------------------------ Result (cost=0.00..24.42 rows=7 width=48) -> Append (cost=0.00..24.42 rows=7 width=48) -> Seq Scan on data (cost=0.00..22.38 rows=5 width=48) Filter: ((name)::text = 'aaa'::text) -> Seq Scan on data_a data (cost=0.00..1.02 rows=1 width=23) Filter: ((name)::text = 'aaa'::text) -> Seq Scan on data_b data (cost=0.00..1.02 rows=1 width=23) Filter: ((name)::text = 'aaa'::text) (8 rows) /*********************************************/ SET constraint_exclusion=on; SET SHOW constraint_exclusion; constraint_exclusion ---------------------- on (1 row) EXPLAIN SELECT * FROM data WHERE name = 'aaa'; QUERY PLAN ------------------------------------------------------------------------ Result (cost=0.00..24.42 rows=7 width=48) -> Append (cost=0.00..24.42 rows=7 width=48) -> Seq Scan on data (cost=0.00..22.38 rows=5 width=48) Filter: ((name)::text = 'aaa'::text) -> Seq Scan on data_a data (cost=0.00..1.02 rows=1 width=23) Filter: ((name)::text = 'aaa'::text) -> Seq Scan on data_b data (cost=0.00..1.02 rows=1 width=23) Filter: ((name)::text = 'aaa'::text) (8 rows) I have tried with name as text in data table and in CHECK. Where do I have an error? Is it possible to make partitions with strings? Thank you for any clues. Best regards, jamcito ---------------------------------------------------------------------- smieszne, muzyka, pilka, sexy, kibice, kino, ciekawe, extreme, kabaret http://link.interia.pl/f19d4 - najlepsze filmy w intermecie