Though PostgreSQL
provides nonblocking read/write access to table
data, nonblocking read/write access is not currently offered for every
index access method implemented
in PostgreSQL.
The various index types are handled as follows:
- B-tree indexes
Short-term share/exclusive page-level locks are used for
read/write access. Locks are released immediately after each
index tuple is fetched or inserted. B-tree indexes provide
the highest concurrency without deadlock conditions.
- GiST and R-tree indexes
Share/exclusive index-level locks are used for read/write access.
Locks are released after the statement (command) is done.
- Hash indexes
Share/exclusive page-level locks are used for read/write
access. Locks are released after the page is processed.
Page-level locks provide better concurrency than index-level
ones but are liable to deadlocks.
In short, B-tree indexes are the recommended index type for concurrent
applications.