1

我正在尝试使用 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');

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

在此处输入图像描述

4

1 回答 1

1

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

这是修复的提交,本月似乎正在对其进行审查 - https://commitfest.postgresql.org/17/1591/

于 2018-07-21T02:41:08.183 回答