PostgreSQL 10使用枚举按列表分区

时间:2018-01-29 13:25:28

标签: postgresql enums partitioning postgresql-10

我正在尝试使用枚举列对我的表进行分区,我遇到了一种有些奇怪的行为。

create type positivity as enum (
    'POSITIVE',
    'NEGATIVE'
);

create table test (id int, polarity positivity) partition by list (polarity);
create table test_1 partition of test for values in ('POSITIVE');
create table test_2 partition of test for values in ('NEGATIVE');

explain select * from test where polarity = 'NEGATIVE';

对于这段代码,这是我得到的解释输出: enter image description here

我的问题是为什么它会像这样工作,这是postgres中的错误还是功能?

编辑:手动添加约束改进了查询计划,这样我就得到了我想要的东西(但我仍然对上面解释的行为感到徘徊):

alter table test_1 add constraint test_1_check check(polarity='POSITIVE');
alter table test_2 add constraint test_1_check check(polarity='NEGATIVE');

相同解释命令的新查询计划:

enter image description here

1 个答案:

答案 0 :(得分:1)

对于任何在2018年中期关注此问题的人,此修复程序尚未发布。我仍然看到它发生在10.4。

这是该修复程序的提交,看来本月正在审查中- https://commitfest.postgresql.org/17/1591/