我尝试使用PostgreSQL 10的新分区方法,我有一个包含150万行的父表。我想在这个已经填充的表上创建分区。
我创建了一个新的母版表,它的列与CREATE脚本中的真实母版表相同;
CREATE TABLE master_part (objectid integer,poly geometry(Geometry,2321), parcel character varying(255), m_date(date)) PARTITION BY RANGE (m_date);然后我创建了子表,由m_date列进行分区;
CREATE TABLE parsel_2014_04
PARTITION OF parsel_part FOR VALUES FROM ('2014-04-01') TO ('2014-04-30');
CREATE TABLE parsel_2014_05
PARTITION OF parsel_part FOR VALUES FROM ('2014-05-01') TO ('2014-05-31');
CREATE TABLE parsel_2014_06
PARTITION OF parsel_part FOR VALUES FROM ('2014-06-01') TO ('2014-06-30');
CREATE TABLE parsel_2014_07
PARTITION OF parsel_part FOR VALUES FROM ('2014-07-01') TO ('2014-07-31');
CREATE TABLE parsel_2014_08
PARTITION OF parsel_part FOR VALUES FROM ('2014-08-01') TO ('2014-08-31');
CREATE TABLE parsel_2014_09
PARTITION OF parsel_part FOR VALUES FROM ('2014-09-01') TO ('2014-09-30');
CREATE TABLE parsel_2014_10
PARTITION OF parsel_part FOR VALUES FROM ('2014-10-01') TO ('2014-10-30');
CREATE TABLE parsel_2014_11
PARTITION OF parsel_part FOR VALUES FROM ('2014-11-01') TO ('2014-11-30');
CREATE TABLE parsel_2014_12
PARTITION OF parsel_part FOR VALUES FROM ('2014-12-01') TO ('2014-12-31');
CREATE TABLE parsel_2015_01
PARTITION OF parsel_part FOR VALUES FROM ('2015-01-01') TO ('2015-01-31');
CREATE TABLE parsel_2015_02
PARTITION OF parsel_part FOR VALUES FROM ('2015-02-01') TO ('2015-02-28');
CREATE TABLE parsel_2015_03
PARTITION OF parsel_part FOR VALUES FROM ('2015-03-01') TO ('2015-03-31');
CREATE TABLE parsel_2015_04
PARTITION OF parsel_part FOR VALUES FROM ('2015-04-01') TO ('2015-04-30');当我运行上面的脚本来创建子表时,我得到了下面的错误;
错误:没有为行详细信息找到关系"parsel_part“的分区:失败行的分区键包含(m_date) = (2014-10-31)。SQL状态: 23514
这个错误似乎非常罕见,因为我找不到任何关于它的东西。
也许有人以前见过?
发布于 2018-01-24 17:00:24
您的问题与文档中的这一点有关:
在创建范围分区时,使用
FROM指定的下界是包含性界,而用TO指定的上界是排他界。
(强调后加)
所以事实上
CREATE TABLE parsel_2014_10 PARTITION OF parsel_part
FOR VALUES FROM ('2014-10-01') TO ('2014-10-31');这个分区中没有包含日期2014-10-31,因此在所有分区表中都没有包含日期(所有结束日期的日期也不一样)。
参见以下示例:https://www.postgresql.org/docs/10/static/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
一个分区的to值必须与下一个分区的from值相同(因为to部件是独占的,from是包含的)。
https://dba.stackexchange.com/questions/196134
复制相似问题