如何同时删除 Postgres 中的列(和索引)?
How to drop a column(and index) in Postgres concurrently?
我需要从我的(大型)Postgres table 中删除一列。这很简单,但是列上还有一个索引。
当我使用 ALTER TABLE
删除列时,我可以看到索引被隐式删除,但我知道在删除索引时我应该使用 CONCURRENTLY
。
所以我的问题是:
将此操作作为两个查询执行是否合适。即:
DROP INDEX CONCURRENTLY IF EXISTS myTable_myColumn_idx;
ALTER TABLE myTable DROP COLUMN IF EXISTS myColumn;
或者这会导致竞争条件,即在索引仍在删除时执行更改 table 吗?
删除索引通常是一个非常快速的操作。我会先用一个大索引测试它,看看单独删除索引是否真的值得。
如果您发现确实需要很长时间,请使用您建议的语句,但不要尝试 运行 它们并行(它们会相互锁定),而是在单个数据库会话。这将使 table 被锁定的时间保持在最低限度。
我需要从我的(大型)Postgres table 中删除一列。这很简单,但是列上还有一个索引。
当我使用 ALTER TABLE
删除列时,我可以看到索引被隐式删除,但我知道在删除索引时我应该使用 CONCURRENTLY
。
所以我的问题是:
将此操作作为两个查询执行是否合适。即:
DROP INDEX CONCURRENTLY IF EXISTS myTable_myColumn_idx;
ALTER TABLE myTable DROP COLUMN IF EXISTS myColumn;
或者这会导致竞争条件,即在索引仍在删除时执行更改 table 吗?
删除索引通常是一个非常快速的操作。我会先用一个大索引测试它,看看单独删除索引是否真的值得。
如果您发现确实需要很长时间,请使用您建议的语句,但不要尝试 运行 它们并行(它们会相互锁定),而是在单个数据库会话。这将使 table 被锁定的时间保持在最低限度。