You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建PostgreSQL分区后插入数据报错:无对应分区(ymd=20190902)

创建PostgreSQL分区后插入数据报错

SQL Error [23514]: ERROR: 关系"data_part"无对应此行的分区 详情:失败行的分区键值:(ymd) = (20190902)

问题分析

核心原因是PostgreSQL范围分区遵循左闭右开规则:FOR VALUES FROM (a) TO (b)的区间包含a但不包含b。你创建的第一个分区data_part_201909_1范围是('20190901') TO ('20190902'),仅能容纳20190901的数据,20190902不在任何已定义的分区范围内,因此插入时触发报错。

解决办法

调整分区区间(推荐方案)

修改分区的上下限,让区间连续覆盖所有可能的ymd值:

-- 若原分区未插入数据,先删除错误分区
DROP TABLE data_part_201909_1;

-- 创建覆盖20190901-20190902的分区
CREATE TABLE data_part_201909_1 PARTITION OF data_part
    FOR VALUES FROM ('20190901') TO ('20190903')
    TABLESPACE pg_default;

-- 调整后续分区起始值,保证区间连续
CREATE TABLE data_part_201909_2 PARTITION OF data_part
    FOR VALUES FROM ('20190903') TO ('20190905')
    TABLESPACE pg_default;   

-- 月末分区用下月第一天作为上限,避免遗漏月末数据
CREATE TABLE data_part_201909_3 PARTITION OF data_part
    FOR VALUES FROM ('20190905') TO ('20191001')
    TABLESPACE pg_default;   

关于继承表方式的补充说明

你用INHERITS创建的是PostgreSQL早期的继承式分区,这种方式需要手动编写触发器实现数据自动路由,否则直接插入父表measurement的数据不会自动分发到子表,甚至可能导致数据冗余。现代PostgreSQL更推荐使用你第一次尝试的声明式分区(PARTITION BY语法),它内置数据路由逻辑,无需手动维护触发器。


内容的提问来源于stack exchange,提问作者chanhoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:58:23