SQL COMMAND · 索引与统计
DROP INDEX
移除一个索引
DROP索引与统计引入 10(基线)现存至 20 devel0 次语法变更
- 动词
DROP- 对象
INDEX- 分组
- 索引与统计
- 引入版本
- 10(基线)
- 状态
- 现存
- 语法变更次数
- 0
- 手册小节数
- 5
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
锁模式 PostgreSQL 18
具体锁模式取决于操作变体、目标对象和执行阶段;同一命令可同时取得表锁与行锁。查看完整冲突矩阵
SHARE UPDATE EXCLUSIVE· 表级锁DROP INDEX CONCURRENTLY:在所属表上取得此模式,分阶段等待并移除索引;不在表上持有普通 DROP INDEX 的 ACCESS EXCLUSIVE。ACCESS EXCLUSIVE· 表级锁DROP INDEX(不含 CONCURRENTLY):在所属表上加 ACCESS EXCLUSIVE,阻塞读写;被删除的索引也需要锁定。
语法概要
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自动删除依赖于该索引的对象,以及进一步依赖于这些对象的所有对象(参见第 5.15 节)。
RESTRICT如果有任何对象依赖于该索引,则拒绝删除它。这是默认值。
示例
此命令会删除索引title_idx:
DROP INDEX title_idx;
兼容性
DROP INDEX是PostgreSQL 的一种语言扩展。SQL 标准中没有关于索引的规定。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 19← 18正文更新
正文更新PostgreSQL 17← 16正文更新
正文更新PostgreSQL 12← 11正文更新
正文更新PostgreSQL 11← 10正文更新
正文更新
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
REINDEX | REINDEX | — | 164 次 | |
| 重建索引 | 现存 | |||
CREATE INDEX | CREATE | INDEX | 153 次 | |
| 定义一个新索引 | 现存 | |||
ALTER INDEX | ALTER | INDEX | 132 次 | |
| 更改索引的定义 | 现存 | |||
DROP INDEX | DROP | INDEX | — | |
| 移除一个索引 | 现存 | |||
CREATE STATISTICS | CREATE | STATISTICS | 193 次 | |
| 定义扩展统计信息 | 现存 | |||
ALTER STATISTICS | ALTER | STATISTICS | 173 次 | |
| 更改扩展统计对象的定义 | 现存 | |||
DROP STATISTICS | DROP | STATISTICS | — | |
| 删除扩展统计对象 | 现存 | |||