Embora o PostgreSQL forneça acesso de leitura/escrita sem bloqueio aos dados da tabela, o acesso de leitura/escrita sem bloqueio não é oferecido atualmente para todos os métodos de acesso de índice implementados no PostgreSQL. Os vários tipos de índice são tratados da seguinte forma:
São usados bloqueios exclusivos/compartilhados de curto prazo no nível de página para acesso de leitura/escrita. Os bloqueios são liberados imediatamente após cada linha do índice ser buscada ou inserida. Esses tipos de índice fornecem a concorrência mais alta sem condições de conflito.
São usados bloqueios compartilhados/exclusivos no nível do bloco de hash para acesso de leitura/escrita. Os bloqueios são liberados após todo o bloco ter sido processado. Os bloqueios no nível de bloco fornecem melhor concorrência que os bloqueios no nível de índice, mas o impasse é possível, porque os bloqueios são mantidos por mais tempo que uma operação de índice.
São usados bloqueios exclusivos/compartilhados de curto prazo no nível de página para acesso de leitura/escrita. Os bloqueios são liberados imediatamente após cada linha do índice ser buscada ou inserida. Mas observe que a inserção de um valor indexado pelo GIN geralmente produz várias inserções de chave de índice por linha, portanto, o GIN pode fazer um trabalho substancial para a inserção de um único valor.
No momento, os índices B-Tree oferecem o melhor desempenho para aplicações concorrentes; como também têm mais recursos que os índices hash, são o tipo de índice recomendado para aplicações concorrentes que precisam indexar dados escalares. Ao lidar com dados não escalares, B-Tree não é útil, devendo ser usado os índices GiST, SP-GiST ou GIN.