我正在尝试使用 enum 列对表进行分区,但遇到了一些奇怪的行为。
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');
相同解释命令的新查询计划: