PostgreSQL 9.3 分区不工作
PostgreSQL 9.3 Partitions Not Working
我有一个 table,e,每天设置范围分区。主 table 和分区 table 已经这样定义了。
CREATE TABLE e (
toi TIMESTAMP WITH TIME ZONE
WITH (
OIDS=TRUE
);
CREATE TABLE e_20150501
CONSTRAINT e_20150501_toi_chk CHECK (toi >= ‘2015-05-01’::DATE AND toi < ‘2015- 05-02’::DATE)
INHERITS (e)
WITH (
OIDS=TRUE
);
出于某种原因,无论我如何在 SELECT 中构建我的 WHERE 子句,我似乎无法获得一个不对每个分区进行 Seq 扫描的计划 table?
我试过了……
WHERE toi::DATE >= ‘2015-05-01’::DATE AND toi::DATE <= ‘2015-05-02’::DATE;
WHERE toi >= to_timestamp(‘2015-05-01 12:30:57’, ‘YYYY-MM-DD HH24:MI:SS’) AND toi <= to_timestamp(‘2015-05-02 12:30:57’, ‘YYYY-MM-DD HH24:MI:SS’);
我错过了什么?
您缺少 SET constraint_exclusion = on;
,但您的 table 定义中没有设置它,所有查询都将扫描所有 table 个分区。
参见手册 here 第 5.9.4 节。分区和约束排除
我的第一条评论 post 是正确的。
You are mixing dates and timestamps. You should define your check constraint to use a timestamp as well: CHECK (toi >= timestamp '2015-05-01 00:00:00' ...
And then use timestamps in your query as well. – a_horse_with_no_name
我有一个 table,e,每天设置范围分区。主 table 和分区 table 已经这样定义了。
CREATE TABLE e (
toi TIMESTAMP WITH TIME ZONE
WITH (
OIDS=TRUE
);
CREATE TABLE e_20150501
CONSTRAINT e_20150501_toi_chk CHECK (toi >= ‘2015-05-01’::DATE AND toi < ‘2015- 05-02’::DATE)
INHERITS (e)
WITH (
OIDS=TRUE
);
出于某种原因,无论我如何在 SELECT 中构建我的 WHERE 子句,我似乎无法获得一个不对每个分区进行 Seq 扫描的计划 table?
我试过了……
WHERE toi::DATE >= ‘2015-05-01’::DATE AND toi::DATE <= ‘2015-05-02’::DATE;
WHERE toi >= to_timestamp(‘2015-05-01 12:30:57’, ‘YYYY-MM-DD HH24:MI:SS’) AND toi <= to_timestamp(‘2015-05-02 12:30:57’, ‘YYYY-MM-DD HH24:MI:SS’);
我错过了什么?
您缺少 SET constraint_exclusion = on;
,但您的 table 定义中没有设置它,所有查询都将扫描所有 table 个分区。
参见手册 here 第 5.9.4 节。分区和约束排除
我的第一条评论 post 是正确的。
You are mixing dates and timestamps. You should define your check constraint to use a timestamp as well:
CHECK (toi >= timestamp '2015-05-01 00:00:00' ...
And then use timestamps in your query as well. – a_horse_with_no_name