我需要从我的(大)Postgres表中删除一列。这很简单,但是列上也有一个索引。我可以看到使用ALTER TABLE
删除列时隐式删除了索引,但是我知道删除索引时应该使用CONCURRENTLY
。所以我的问题是:是否适合作为两个查询来执行此操作。即:
DROP INDEX CONCURRENTLY IF EXISTS myTable_myColumn_idx;
ALTER TABLE myTable DROP COLUMN IF EXISTS myColumn;
或者这可能导致竞争状态,在仍然删除索引的情况下执行alter表?
删除索引通常是非常快速的操作。我将首先使用大索引对其进行测试,然后看看是否值得单独删除该索引。
如果发现确实需要很长时间,请使用您建议的语句,但不要尝试在单个数据库会话中并行运行它们(它们将彼此锁定)。这样可以将表锁定的时间降至最少。