pgsql 删除创建索引_如何删除Postgres中表的所有索引?

I keep having this problem: I have like 20 indexes on a table that I need to drop in order to do testing. Dropping the table doesn't drop all of this metadata.

There doesn't seem to be a wildcard drop index ix_table_* or any useful command. There seem to be some bash loops around psql you can write.

There must be something better! Thoughts?

解决方案

Assuming you only want to drop plain indexes:

DO

$$BEGIN

EXECUTE (

SELECT 'DROP INDEX ' || string_agg(indexrelid::regclass::text, ', ')

FROM pg_index i

LEFT JOIN pg_depend d ON d.objid = i.indexrelid

AND d.deptype = 'i'

WHERE i.indrelid = 'your_table_name_here'::regclass -- possibly schema-qualified

AND d.objid IS NULL -- no internal dependency

);

END$$;

Does not touch indexes created as implementation detail of constraints (UNIQUE, PK, EXCLUDE).

The documentation:

DEPENDENCY_INTERNAL (i)

The dependent object was created as part of creation of the referenced

object, and is really just a part of its internal implementation.

You could wrap this in a function for repeated execution.

Related:

Aside: This is a misunderstanding:

Dropping the table doesn't drop all of this metadata.

Dropping a table always cascades to all indexes on the table.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值