我使用的是PostgreSQL14.1,并对一些表使用paritions重新创建了我的实时数据库。
因为我这样做了,所以我可以在服务器不活动时创建索引,但当它活动时,我只能使用concurrently
创建,但不幸的是,当我尝试并发创建索引时,我得到了一个错误。
运行以下命令:
create index concurrently foo on foo_table(col1,col2,col3));
提供错误:
ERROR: cannot create index on partitioned table "foo_table" concurrently
现在它是一台实时服务器,我不能非并发地创建索引,为了提高性能,我需要创建一些索引。你有什么办法吗?
谢谢
2条答案
按热度按时间gmxoilav1#
没问题。首先,使用
CREATE INDEX CONCURRENTLY
在每个分区上创建索引。然后使用CREATE INDEX
在分区表上创建索引。这会很快,分区上的索引将成为索引的分区。6jygbczu2#
步骤1:在分区(父)表上创建索引
此步骤创建的索引无效。这样,任何表分区都不会自动应用索引。
步骤2:使用
CONCURRENTLY
为每个分区创建索引并附加到父索引对每个分区索引重复此步骤。
步骤3:验证在开头(步骤1)创建的父索引是否有效。将所有分区的索引附加到父索引后,父索引将自动标记为有效。
查询应返回零个结果。如果不是这样,那么检查您的脚本是否有错误。