我正在尝试使用枚举列对我的表进行分区,我遇到了一种有些奇怪的行为。
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';
我的问题是为什么它会像这样工作,这是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');
相同解释命令的新查询计划:
答案 0 :(得分:1)
对于任何在2018年中期关注此问题的人,此修复程序尚未发布。我仍然看到它发生在10.4。
这是该修复程序的提交,看来本月正在审查中- https://commitfest.postgresql.org/17/1591/