【问题标题】:Truncate partition based on condition根据条件截断分区
【发布时间】:2023-12-02 10:13:01
【问题描述】:

我需要根据条件截断 Greenplum 中的分区。实现这一目标的最简单方法是什么?

例子:

ALTER TABLE PACKAGE_INFO TRUNCATE PARTITION FOR ('BOX');

我只需要在特定条件下截断表 PACKAGE_INFO 中带有值 - BOX 的分区。只说几个 PACKAGE_ID。

例如,截断包含 PACKAGE_ID - 100,200,300 的 PACKAGE_TYPE 数据的分区。我不倾向于 DELETE,因为如果我使用 delete,我将无法压缩表。

谢谢。

【问题讨论】:

    标签: sql partitioning truncate greenplum


    【解决方案1】:

    在 GPDB 4.3.x 中,您可以从 AO 和压缩表中删除。您应该升级,因为 4.2.x 将在 2 个月后 EOL,您将不再有支持

    数据库中的截断命令用于删除整个表/分区而无需验证和数据扫描,这就是它快速的原因。在 GPDB 中,它只是用不同的 relfilenode 更改 pg_class 并从底层文件系统中删除表文件。没有选项可以部分截断表格数据

    如果您仍在使用 4.2.x,则必须做一些更聪明的事情。一种选择是在没有这些数据的情况下重新创建分区。第二种选择是拥有一个单独的“可见性地图”表,其中包含已删除 PACKAGE_ID 的列表,每次查询该表时,您都必须与该表连接以删除“已删除”记录

    【讨论】: