ロックとテーブル

34) Postgres provides various lock modes to control concurrent access to data in tables. Some of these lock modes are acquired by Postgres automatically before statement execution, while others are provided to be used by applications. All lock modes (except for AccessShareLock) acquired in a transaction are held for the duration of the transaction.

Postgres は テーブル内のデータに対する同時アクセスを制御するために,さまざまな種類の ロックを備えています.これらのロックの一部は, 文の実行前に Postgres が自動的に獲得します. それ以外はアプリケーションでの使用を意図しています. AccessShareLock を除き,トランザクション内で獲得されたすべての ロックモードは,そのトランザクション実行の間維持されます.

35) In addition to locks, short-term share/exclusive latches are used to control read/write access to table pages in shared buffer pool. Latches are released immediately after a tuple is fetched or updated.

またロックに加え,共有バッファ内に置かれたテーブルの ページ読み込み/書き込みを制御するために,共有/排他モードの 一時ロック(ラッチ)を採用しています.ラッチは,タプルが フェッチ,または更新されると直ちに開放されます.

テーブルレベルロック

AccessShareLock

37) An internal lock mode acquiring automatically over tables being queried. Postgres releases these locks after statement is done.

問い合わせ対象となるテーブル全体に対して,自動的に獲得される 内部的なロックです.文の実行後, Postgres は直ちにこのロックを開放します.

38) Conflicts with AccessExclusiveLock only.

コンフリクトするロック:AccessExclusiveLock モードのロックのみ

RowShareLock

39) Acquired by SELECT FOR UPDATE and LOCK TABLE for IN ROW SHARE MODE statements.

SELECT FOR UPDATE と,ロックのモードが IN ROW SHARE MODELOCK TABLE 文によって獲得されます.

40) Conflicts with ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:ExclusiveLock,AccessExclusiveLock モードの ロック

RowExclusiveLock

41) Acquired by UPDATE, DELETE, INSERT and LOCK TABLE for IN ROW EXCLUSIVE MODE statements.

UPDATEDELETEINSERT および,ロックのモードを IN ROW EXCLUSIVE MODE に指定した LOCK TABLE 文によって獲得されます.

42) Conflicts with ShareLock, ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:ShareLock,ShareRowExclusiveLock,ExclusiveLock そして AccessExclusiveLock の各モードのロック

ShareLock

43) Acquired by CREATE INDEX and LOCK TABLE table for IN SHARE MODE statements.

CREATE INDEX および, IN SHARE MODE を指定した LOCK TABLE 文によって獲得されます.

44) Conflicts with RowExclusiveLock, ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:RowExclusiveLock,ShareRowExclusiveLock, ExclusiveLock そして AccessExclusiveLock の各モードのロック

ShareRowExclusiveLock

45) Acquired by LOCK TABLE for IN SHARE ROW EXCLUSIVE MODE statements.

IN SHARE ROW EXCLUSIVE MODE を指定した LOCK TABLE 文によって獲得されます.

46) Conflicts with RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:RowExclusiveLock,ShareLock, ShareRowExclusiveLock,ExclusiveLock そして AccessExclusiveLock の各モードのロック

ExclusiveLock

47) Acquired by LOCK TABLE table for IN EXCLUSIVE MODE statements.

IN EXCLUSIVE MODE を指定した LOCK TABLE 文によって獲得されます.

48) Conflicts with RowShareLock, RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:RowShareLock,RowExclusiveLock,ShareLock, ShareRowExclusiveLock,ExclusiveLock,そして AccessExclusiveLock の各モードのロック

AccessExclusiveLock

49) Acquired by ALTER TABLE, DROP TABLE, VACUUM and LOCK TABLE statements.

ALTER TABLEDROP TABLEVACUUM ,および LOCK TABLE 文によって獲得されます.

50) Conflicts with RowShareLock, RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.

コンフリクトするロック:RowShareLock,RowExclusiveLock,ShareLock, ShareRowExclusiveLock,ExclusiveLock そして AccessExclusiveLock の 各モードのロック

Note: 51) Only AccessExclusiveLock blocks SELECT (without FOR UPDATE) statement.

FOR UPDATE のない SELECT 文は AccessExclusiveLock モードのロックによってのみブロックされます.

行レベルロック

53) These locks are acquired when internal fields of a row are being updated (or deleted or marked for update). Postgres doesn't remember any information about modified rows in memory and so has no limit to the number of rows locked without lock escalation.

行レベルロックは,行の中のフィールドを更新する場合(あるいは削除, または更新用にマークする場合)に獲得されます. Postgres は,変更した行の情報を メモリ中に残していきません.ですからロックする行数に制限がないにも かかわらず,テーブルロックへの移行(ロックエスカレーション)を 引き起こしたりすることはありません.

54) However, take into account that SELECT FOR UPDATE will modify selected rows to mark them and so will results in disk writes.

ただし,SELECT FOR UPDATE 文は抽出した行に(更新の) マークをつけるので、この文の結果はディスクに書き込まれることに注意 してください。

55) Row-level locks don't affect data querying. They are used to block writers to the same row only.

行レベルロックはデータの問い合わせはブロックせず, 同一行を対象としている複数の書き込み処理同士だけを ブロックします.