Gostaria de saber qual a diferença entre CREATE INDEX e CREATE INDEX CONCURRENTLY (se houver) após a criação do índice ter sido construído. Tenho discutido com um colega sobre como eles funcionam.
Meu entendimento é que CREATE INDEX exige um bloqueio completo na tabela para construir o índice rapidamente, causando tempo de inatividade, mas para CREATE INDEX CONCURRENTLY apenas um bloqueio parcial é obtido na tabela. Isso significa que os índices são calculados para cada nova transação/inserção à medida que a tabela contém gravações e, sempre que não há transações/inserções acontecendo, ela está "preenchendo" ou processando os índices para os dados que já estavam lá. Depois que esse processo de "preenchimento" for concluído, não haverá diferença estrita entre CREATE INDEX e CREATE INDEX CONCURRENTLY.
O entendimento do meu colega é que CREATE INDEX CONCURRENTLY se comporta de maneira diferente e que, mesmo após a conclusão do "processo de preenchimento", CREATE INDEX CONCURRENTLY continua sendo menos intensivo em carga nas gravações.
Alguém pode nos fornecer uma visão melhor de como funciona a criação de índices? Quando podemos dizer que um índice foi criado? O que acontece depois que o índice termina de ser criado sempre que você insere dados? E se há diferença no cálculo do índice após a conclusão da construção ao usar CONCURRENTEMENTE ou não?