PSQL Programmer's Guide (v11)

複数ポジション ブロックの並行制御 (トランザクショナル インターフェイス)

MicroKernel では、同じクライアントが同じファイル内で複数のポジション ブロック(カーソル)を使用できます。

並行トランザクションまたは排他トランザクションの内側では、複数ポジション ブロックは変更されたページの同じビューを共有します。複数ポジション ブロック セット内の各ポジション ブロックは、そのセットのほかのポジション ブロックによって行われた変更であれば、変更がコミットされる前であっても、直ちにわかります。

複数ポジション ブロックはすべてのロック、つまり、明示的レコード ロック、暗黙レコード ロック、暗黙ページ ロック、ファイル ロックを共有します。したがって、どのクライアントについても、あるポジション ブロックのロックによって別のポジション ブロックが同じファイル内で別のロックを取得できなくなることはありません。

クライアントがトランザクションを終了または中止すると、MicroKernel はそのクライアントの暗黙ロックとファイル ロックをすべて解除します。ただし、クライアントの明示的レコード ロックがトランザクション内から与えられたものであるかどうかにかかわらず、MicroKernel はファイル内の各ポジション ブロックが要求したときだけクライアントの明示的レコード ロックを解除します。

たとえば、キー値として -2 を持つ Unlock オペレーション(27)は、指定されたポジション ブロックに属する複数レコード ロックのみを解除します。Close オペレーション(1)は、その実行時に指定された同じポジション ブロックに対して取得されたロックのみを解除します。同様に、クライアントがトランザクション内でポジション ブロックの最初のレコード ロック、ページ ロック、またはファイル ロックを取得したとき、MicroKernel はそのポジション ブロックに対して取得していた明示的レコード ロックのみを解除します。例 2 で、クライアント 1 がファイル 1、ファイル 2、ファイル 3 を開くのではなく、同じファイルを 3 回開いていた場合、また、クライアント 1 が最初の 2 つのポジション ブロックのみを使用してファイルにアクセスしていた場合、3 つ目のポジション ブロック用に取得した明示的ロックは、End Transaction オペレーション以降も変化しません。


複数並行制御ツールの例 (トランザクショナル インターフェイス)

複数ポジション ブロック (トランザクショナル インターフェイス)