在我的Postgres 14.3数据库中,我想在不阻塞其他数据库操作的情况下创建一个索引。所以我想使用CONCURRENTLY
选项,我成功地执行了下面的语句。
CREATE INDEX CONCURRENTLY idx_test
ON public.ap_identifier USING btree (cluster_id);
但是当使用
检查数据库时:SELECT * FROM pg_indexes WHERE indexname = 'idx_test';
我只看到:索引没有CONCURRENTLY
选项
我希望索引是用CONCURRENTLY
选项创建的。
是否有数据库开关来打开此功能,或者为什么它似乎忽略了CONCURRENTLY
?
如前所述,CONCURRENTLY
不是索引的属性,而是在不阻塞并发写的情况下创建索引的指令。结果索引不会以任何方式记住该选项。阅读"同时建立索引"一章。
在大表上创建索引可能需要一些时间。系统表可以查询pg_stat_progress_create_index
进行进度报告。在此过程中,CONCURRENTLY
仍然反映在command
列中。
让您感到安慰的是:一旦创建,所有索引都是"并发"的;无论如何,从某种意义上说,它们是自动维护的,而不会阻塞并发的读写(除了防止重复的UNIQUE
索引)。