DROP INDEX — 删除一个索引
DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
DROP INDEX 从数据库系统中删除一个现有的索引。要执行这个命令,你必须拥有该索引。
CONCURRENTLY 在不锁定该索引所在表上的并发选择、插入、更新和删除的情况下删除索引。普通的 DROP INDEX 会在表上获取一个 ACCESS EXCLUSIVE 锁,阻塞其他访问,直到索引删除完成。使用这个选项时,该命令会改为等待冲突的事务结束。
使用这个选项时需要注意几个事项。只能指定一个索引名,并且不支持 CASCADE 选项(因此,支持 UNIQUE 或 PRIMARY KEY 约束的索引不能用这种方式删除)。另外,普通的 DROP INDEX 命令可以在事务块内执行,但 DROP INDEX CONCURRENTLY 不行。最后,分区表上的索引不能使用这个选项删除。
对于临时表,DROP INDEX 总是非并发的,因为没有其他会话能够访问它们,而且非并发的索引删除开销更小。
IF EXISTS如果索引不存在,则不会抛出错误,而是发出一个提示。
name要删除的索引的名称(可以选择带模式限定)。
CASCADE自动删除依赖于该索引的对象,并进而删除所有依赖于这些对象的对象(参见 Section 5.15)。
RESTRICT如果有任何对象依赖于该索引,则拒绝删除它。这是默认行为。
这个命令将删除索引 title_idx:
DROP INDEX title_idx;
DROP INDEX 是 PostgreSQL 的一种语言扩展。SQL 标准中没有关于索引的规定。