首页 > 解决方案 > 即使添加了检查约束,附加分区也需要更多时间

问题描述

所以基本上我们在 Postgres 11 DB 中有一个非常大的表,自添加该表以来已经有数亿条数据。现在我们正在尝试将其转换为基于created_at列的基于范围的分区表(时间戳 -不可为空)。

正如Postgres Partitioning Documentation中所建议的那样,在实际运行附加分区之前,我尝试在同一个表上添加检查约束。因此,在那之后,如果我运行附加分区,理想情况下它应该花费更少的时间,因为由于表上存在相应的约束,它应该跳过验证,但我发现它仍然需要更多时间。我的分区范围和约束看起来像这样:

alter table xyz_2020 add constraint temp_check check (created_at >= '2020-01-01 00:00:00' and created_at < '2021-01-01 00:00:00');
ALTER TABLE xyz ATTACH PARTITION xyz_2020 FOR VALUES FROM ('2020-01-01 00:00:00') TO ('2021-01-01 00:00:00');

xyz_2020是我现有的大桌子,它从xyz. 并且xyz是像旧表一样创建的新主表。所以我想了解附加分区可能仍需要更多时间的可能原因。

编辑:我们正在创建一个新的分区表并尝试将旧表附加为其分区之一。

标签: postgresqlpartitioningcheck-constraintspostgresql-11range-partitions

解决方案


推荐阅读