9.5. ロックとインデックス

PostgreSQLは、テーブルデータへの「ノンブロック読み込み/書き込みアクセス」を備えています。 しかし現在、この機能はPostgreSQLで実装されているすべてのインデックスアクセスメソッドに対して実装されているわけではありません。

各種のインデックスでは下記のように扱われます。

B-treeインデックス

読み込み/書き込みアクセスに短期の共有/排他モードのページレベルロックを使います。 ロックは、インデックスのタプルが挿入または取り出されるとただちに解放されます。B-treeインデックスは、デッドロック状態になることなく、最も高い同時実行性を提供します。

GiST および R-Tree インデックス

読み込み/書き込みアクセスに共有/排他モードのインデックスレベルロックを使います。 ロックは、文 (コマンド) の処理完了後に解放されます。

ハッシュインデックス

読み込み/書き込みアクセスに共有/排他モードのページレベルロックを使います。 ロックは、そのページが処理された後に解放されます。 ページレベルロックは、インデックスレベルのロックよりも同時実行性に優れていますが、デッドロックに陥りやすくなります。

つまり、B-treeインデックス型は同時実行アプリケーションに推奨されます。