使用ctid删除Postgres表中的行

问题描述 投票:0回答:1

我们有一张表,记录了近20亿个事件。根据我们的数据模型,每个事件都由4列组合主键唯一标识。排除主键,每个单独的不同列上有5个B树索引。所以共有6个B树索引。

记录的事件跨越多年,现在我们需要删除超过1年的数据。

我们有一个time列,每个事件都记录了很长的值。我们使用以下查询,

delete from events where ctid = any ( array (select ctid from events where time < 1517423400000 limit 10000) )

指数是否得到更新?

在测试期间,它没有。

插入后,

total_table_size - 27893760 table_size - 7659520 index_size - 20209664

删除后,

total_table_size - 20226048 table_size - 0 index_size - 20209664

postgresql sql-delete
1个回答
-1
投票

可以完成Reindex

Command:     REINDEX
Description: rebuild indexes
Syntax:
REINDEX { INDEX | TABLE | DATABASE | SYSTEM } name [ FORCE ]
© www.soinside.com 2019 - 2024. All rights reserved.