首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres表分区“无分区关系”parsel_part发现行“错误”?

Postgres表分区“无分区关系”parsel_part发现行“错误”?
EN

Database Administration用户
提问于 2018-01-24 16:10:55
回答 1查看 29.2K关注 0票数 8

我尝试使用PostgreSQL 10的新分区方法,我有一个包含150万行的父表。我想在这个已经填充的表上创建分区。

我创建了一个新的母版表,它的列与CREATE脚本中的真实母版表相同;

代码语言:javascript
复制
CREATE TABLE master_part (objectid integer,poly geometry(Geometry,2321), parcel character varying(255), m_date(date)) PARTITION BY RANGE (m_date);

然后我创建了子表,由m_date列进行分区;

代码语言:javascript
复制
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

这个错误似乎非常罕见,因为我找不到任何关于它的东西。

也许有人以前见过?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-01-24 17:00:24

您的问题与文档中的这一点有关:

在创建范围分区时,使用FROM指定的下界是包含性界,而用TO指定的上界是排他界。

(强调后加)

所以事实上

代码语言:javascript
复制
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是包含的)。

票数 14
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/196134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档