ロックとテーブルPostgreSQLは、テーブル内のデータに対する同時アクセスを制御するためにさまざまな種類のロックモードを備えています。これらのロックの一部は、文の実行前にPostgreSQLが自動的に行います。それ以外はアプリケーションで使用します。トランザクション実行時に獲得されたすべてのロックモードは、そのトランザクションが終了されるまで維持されます。テーブルレベルロックAccessShareLock読み込みロックモードは、テーブルで問い合わせが行われたときに自動的に獲得されます。AccessExclusiveLockモードのみコンフリクトします。TABLE文によって獲得されます。ExclusiveLockモード、AccessExclusiveLockモードとコンフリクトします。TABLEによって獲得されます。モードとコンフリクトします。文によって獲得されます。モードとコンフリクトします。TABLE文によって獲得されます。RowExclusiveLock、ShareUpdateExclusiveLock、ShareRowExclusiveLock、ExclusiveLock、AccessExclusiveLockモードとコンフリクトします。文によって獲得されます。RowExclusiveLock、ShareUpdateExclusiveLock、ShareLock、ShareRowExclusiveLock、ExclusiveLock、AccessExclusiveLockモードとコンフリクトします。TABLE文によって獲得されます。モードとコンフリクトします。TABLEによって獲得されます。全てのモード(AccessShareLock、RowShareLock、RowExclusiveLock、ShareUpdateExclusiveLock、ShareLock、ShareRowExclusiveLock、ExclusiveLock、AccessExclusiveLock)とコンフリクトします。UPDATEなし)文をブロックします。行レベルロック行レベルロックは、行が更新されたとき(または削除、更新のために印が付けられたとき)に獲得されます。行レベルロックはデータの問い合わせに影響を与えません。同じ行への書き込みのみを阻止します。PostgreSQLは、メモリ上に変更された行の情報を記憶してませんので、同時にロックできる行数の上限はありません。行をロックする際に、ディスクに書き込む作業が発生するかもしれません。UPDATEは選択された行に、印を付けるように変更させ、ディスクにそのことを書き込むことになります。テーブルと行ロックに加え、一時的な共有/排他ロックがあり、これらは共有バッファプールにあるテーブルページへの読み書きのアクセスを管理するために使用されます。これらのロックはタプルが取得されたときや更新されたときに、即座に解除されます。アプリケーション開発者は特にページレベルロックを考慮する必要はありません。ロックについて全てを説明したかったためページレベルロックを説明しました。ロックとインデックス。