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