IBM PureData System for Analytics, バージョン 7.1

LOCK TABLE

LOCK TABLE コマンドは、現在のデータベース内の表をロックするために使用します。ロック・モードは獲得するロックのタイプを指定します。

LOCK TABLE コマンドは、表に対して指定されたモードのロックを獲得できたときに成功します。このコマンドでは、ロック獲得に必要な時間待機します。ただし、NOWAIT オプションを指定した場合、コマンドでロックをただちに獲得できないと、トランザクションは打ち切られます。

ロックはトランザクションがコミットされるか打ち切られるまで保持されます。LOCK TABLE が暗黙的に (つまり、BEGIN/COMMIT ペアではなく) 発行された場合、コマンドは許可された時点でロックを獲得し、その後ただちにロックを解放します。これはコマンドが、コマンド完了時に暗黙的にコミットするシングル・ステートメント・トランザクションであったためです。

可能な場合、トランザクション内のどの照会よりも前に、LOCK TABLE コマンドを発行する必要があります。 ユーザー表に対して照会を発行した後にロックを獲得しても、必ずしも逐次化エラーからトランザクションを保護することにはなりません。

トランザクション内で複数の表に対する LOCK TABLE コマンドを発行する計画をしている場合、アプリケーションが設定した順にコマンドを発行します。 これにより、デッドロックの可能性が最小化されます。デッドロックが発生した場合、Postgres はデッドロックに関与したいずれかのトランザクションを打ち切ります。

ロック・モードの競合

以下の表に、ロック競合のマトリックス、つまり、どのロックが、他のどのタイプのロックをブロックするかを示します。 別のトランザクションが同じ表に対する対立するロックを保持しているときに、トランザクションにロックを付与できなかった場合、ロック・モードは別のモードと競合しています。同じトランザクションが保持する複数のロックは、互いに競合しません。1 つのトランザクションで、同じ表に対して複数のモードのロックを保持できます。 同じ表に対する複数のロックを獲得する場合、デッドロックの可能性を最小化するため、より強いロックを最初に要求してください。 あるトランザクションが同じ表に対する 2 つのロックを必要とし、そのいずれかが他方よりも強いわけではない場合 (特に、SHARE と ROW EXCLUSIVE)、SHARE ROW EXCLUSIVE など、両方を包含するロック・モードを検討してください。

表 1. ロック互換性マトリックス
  Access Share Row Share Row Exclusive Share Share Row Exclusive Exclusive Access Exclusive
Access Share OK OK OK OK OK OK 競合
Row Share OK OK OK OK OK 競合 競合
Row Exclusive OK OK OK 競合 競合 競合 競合
Share OK OK 競合 OK 競合 競合 競合
Share Row Exclusive OK OK 競合 競合 競合 競合 競合
Exclusive OK 競合 競合 競合 競合 競合 競合
Access Exclusive 競合 競合 競合 競合 競合 競合 競合

構文

表をロックする場合の構文
LOCK TABLE <table> in <lockmode> MODE [NOWAIT]

入力

LOCK TABLE コマンドの入力は以下のとおりです。

表 2. LOCK TABLE の入力
入力 説明
<table> ロックする表の名前。
<lockmode> 表に対して獲得するロックのタイプ (表 3を参照)。 ロック・モードで単語 ROW が使用されていても、行レベル・ロックは暗黙指定されません。
NOWAIT 要求したロックをただちに獲得できない場合に、コマンドによってエラーが返され、トランザクションが打ち切られます。
表 3. ロック・モード
ロック・モード 獲得を行うコマンド 必要な特権 注意
ACCESS SHARE SELECT Select これは最も弱いロック・モードです。 1 つの表に対して複数のトランザクションがこの種類のロックを保持できます。
ROW SHARE   Insert、Delete、または Update 1 つの表に対して複数のトランザクションがこの種類のロックを保持できます。
ROW EXCLUSIVE INSERT、DELETE、および UPDATE Insert、Delete、または Update 1 つの表に対して複数のトランザクションがこの種類のロックを保持できます。
SHARE CREATE MATERIALIZED VIEW と GENERATE STATISTICS Select または Genstats 1 つの表に対して複数のトランザクションがこの種類のロックを保持できます。
SHARE ROW EXCLUSIVE   Insert、Delete、または Update  
EXCLUSIVE   Insert、Delete、または Update  
ACCESS EXCLUSIVE DROP TABLE、ALTER TABLE、および TRUNCATE TABLE Drop、Alter、または Truncate  

出力

LOCK TABLE コマンドの出力は以下のとおりです。

表 4. LOCK TABLE の出力
出力 説明
LOCK TABLE コマンドは正常に実行されました。
NOTICE: LOCK TABLE issued after query against user tables トランザクションがユーザー表に対する照会を発行した後に LOCK TABLE が発行された場合、システムにより NOTICE メッセージが表示され、コマンドは要求されたロックを獲得できるようになると成功します。

特権

admin ユーザー、表の所有者、またはこの表が定義されたデータベースかスキーマの所有者でなければなりません。あるいは、ご使用のアカウントに、表 3に示された適切なオブジェクト特権が付与されていなければなりません。

使用方法

以下に使用例を示します。
LOCK TABLE customers IN ROW EXCLUSIVE MODE;


フィードバック | Copyright IBM Corporation 2014 | 最終更新日: 2014-02-28