PostgreSQLは、テーブルデータへのノンブロック読み込み/書き込みアクセスを備えています。しかし現在、この機能はPostgreSQLで実装されている全てのインデックスアクセスメソッドに対して実装されているわけではありません。 各種のインデックスでは下記のように扱われます。
読み込み/書き込みアクセスに短期の共有/排他モードのページレベルロックを使います。 ロックは、インデックス行が挿入または取り出されるとただちに解放されます。 B-treeインデックスは、デッドロック状態になることなく、最も高い同時実行性を提供します。
読み込み/書き込みアクセスに共有/排他モードのインデックスレベルロックを使います。 ロックは、コマンドの処理完了後に解放されます。
読み込み/書き込みアクセスに共有/排他モードのハッシュバケツレベルロックを使います。 ロックは、バケツ全体が処理された後に解放されます。 バケツレベルロックは、インデックスレベルのロックよりも同時実行性に優れていますが、1つのインデックス操作よりも長くロックが保持されますので、デッドロックに陥りやすくなります。
まとめると、B-treeインデックスは同時実行アプリケーションにおいて最善の性能を提供します。 これはまた、ハッシュインデックスよりも多くの機能を持つため、スカラデータのインデックスが必要な同時実行アプリケーションで推奨するインデックス型です。 非スカラデータを扱う場合、B-treeを使用することができないことは明確です。 この場合、アプリケーション開発者は、GistとR-treeインデックスは同時実行性能が相対的に低いことに注意しなければなりません。