繁体   English   中英

如何在Postgresql中同时执行DROP INDEX列表?

[英]How to perform a list of DROP INDEX CONCURRENTLY in Postgresql?

在PostgreSql 9.2中,当我尝试在“ PGAdmin-SQL Panel”中独立地同时使用DROP INDEX时,单个查询执行得很好。 但是,当我在Postgresql函数内部或从Java JDBC使用相同的查询时,出现了错误-“无法在函数或事务块中调用DROP INDEX”。 我有一个要求,即使在其他读取/写入操作正在访问数据库而又彼此不冲突的情况下,我也希望删除一组索引。 在这种情况下,您能建议一些方法删除索引列表吗?

您不能在函数,内联代码或事务中同时使用放置索引。 如果您无法在JDBC应用程序中执行此操作,则可以先暂停自动提交的调整。 或者您可以使用SQL生成一些放置索引的sql LIKE:

select 'drop index concurrently "'||schemaname||'"."'||indexname||'";' from pg_indexes where schemaname='public';
 drop index concurrently "public"."idx_tbl_id";
 drop index concurrently "public"."tbl1_pkey";
 drop index concurrently "public"."tbl_join_1_pkey";
 drop index concurrently "public"."tbl_join_2_pkey";
 drop index concurrently "public"."tbl_join_3_pkey";
 drop index concurrently "public"."tbl_join_4_pkey";
 drop index concurrently "public"."tbl_join_5_pkey";
 drop index concurrently "public"."tbl_join_6_pkey";
 drop index concurrently "public"."tbl_join_7_pkey";
 drop index concurrently "public"."tbl_join_8_pkey";
 drop index concurrently "public"."tbl_join_9_pkey";
 drop index concurrently "public"."pgbench_branches_pkey";
 drop index concurrently "public"."pgbench_tellers_pkey";
 drop index concurrently "public"."pgbench_accounts_pkey";
 drop index concurrently "public"."tbl_userinfo_pkey";
 drop index concurrently "public"."i_test_pkey";

然后在PGAdmin窗口中进行操作。 不开始 结束; 块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM