tom*_*mka 6 postgresql index constraint index-tuning
我使用 Postgres 11 并想更改支持大表(约 7.5 亿行)主键的索引。主键是bigint列id,我想使用该INCLUDE术语包含一个额外的列。这需要在没有表重写的情况下发生(即没有新的/更改的列)。
删除当前PRIMARY KEY约束并不方便,因为很多其他表都引用了目标表。我想可以删除FOREIGN KEY所有这些表的PRIMARY KEY约束,然后删除约束,使用新索引重新创建,然后重新创建FOREIGN KEY约束。有没有更好的方法来做到这一点?
在不弄乱目录的情况下(这不值得称赞),我能想到的唯一选择是要求您暂时不使用外键:
UNIQUE您可以在包含适当子句的表上定义第二个索引INCLUDE。
如果您使用CONCURRENTLY子句CREATE INDEX,那不应该造成破坏。
然后您可以使用删除原始主键约束和所有依赖的外键DROP INDEX ... CASCADE。
然后使用ALTER TABLE ... ADD CONSTRAINT ... USING INDEX将唯一索引变成主键约束。
现在您可以重新创建外键约束。