Cap*_*pan 6 postgresql partitioning postgresql-10
我正在尝试使用 PostgreSQL 10 的新分区方法。我有一个包含 150 万行的父表。我想在这个已经填充的表上创建分区。
我创建了一个 新的主表,它与CREATE SCRIPT 中的真实主表具有相同的列;
CREATE TABLE master_part (objectid integer,poly geometry(Geometry,2321), parcel character varying(255), m_date(date)) PARTITION BY RANGE (m_date);
Run Code Online (Sandbox Code Playgroud)
然后我创建了子表,由 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');
Run Code Online (Sandbox Code Playgroud)
当我运行上面的脚本来创建子表时,出现以下错误;
错误:没有为行细节找到关系“parsel_part”的分区:失败行的分区键包含(m_date)=(2014-10-31)。SQL 状态:23514
这个错误似乎非常罕见,因为我找不到任何关于它的信息。
也许有人以前见过它?
Pat*_*zek 10
您的问题与文档中的这一点有关:
创建范围分区时,用指定的下限
FROM是包含边界,而用指定的上限TO是互斥边界。
(强调)
所以实际上在
CREATE TABLE parsel_2014_10 PARTITION OF parsel_part
FOR VALUES FROM ('2014-10-01') TO ('2014-10-31');
Run Code Online (Sandbox Code Playgroud)
日期2014-10-31是不包含在这个分区,并在所有的分区表,因此无处(和同所有结束日期)
请参阅以下示例:https : //www.postgresql.org/docs/10/static/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
to一个分区的值必须与下一个分区的from值相同(因为to部分是独占的,而部分from是包含的)。
| 归档时间: |
|
| 查看次数: |
13541 次 |
| 最近记录: |