Com simples CREATE INDEX
, a tabela será bloqueada para gravações, mas não para leituras.
Use CREATE INDEX CONCURRENTLY
para evitar bloqueios de gravação também.
Nos documentosCREATE INDEX
do PostgreSQL sobre :
Quando essa opção é usada, o PostgreSQL cria o índice sem usar nenhum bloqueio que impeça inserções, atualizações ou exclusões simultâneas na tabela; enquanto uma compilação de índice padrão bloqueia gravações (mas não leituras) na tabela até que seja concluída. Há várias advertências a serem observadas ao usar esta opção - consulte Construindo índices simultaneamente .
E, mais especificamente (como o @ypercube comentou ):
O PostgreSQL suporta a construção de índices sem bloquear as gravações . Este método é chamado especificando a CONCURRENTLY
opção de CREATE INDEX
. Quando essa opção é usada, o PostgreSQL deve executar duas varreduras da tabela e, além disso, deve aguardar o término de todas as transações existentes que possam potencialmente usar o índice. Portanto, esse método requer mais trabalho total do que uma compilação de índice padrão e leva muito mais tempo para ser concluído. No entanto, como permite que operações normais continuem enquanto o índice é criado, esse método é útil para adicionar novos índices em um ambiente de produção.
Negrito ênfase minha.