LOCK
データベーステーブルへのアクセスを制限します。このコマンドは、トランザクションブロック内で実行されている場合のみ意味を持ちます。
LOCK コマンドは、「ACCESS EXCLUSIVE」モードでテーブルレベルのロックを取得し、必要に応じて、競合するロックが解放されるまで待機します。このように明示的にテーブルをロックすると、他のトランザクションやセッションからテーブルへの読み書きを実行しようとした場合、その操作で待機状態が発生します。あるユーザーが作成した明示的テーブルロックは、別のユーザーがそのテーブルからデータを選択したり、そのテーブルにデータをロードすることを一時的に禁止します。LOCK コマンドを含んでいるトランザクションが終了すると、ロックは解放されます。
制限が緩いテーブルロックは、書き込み操作など、テーブルを参照するコマンドによって黙示的に取得されます。例えば、テーブルからデータを読み取ろうとした際に、別のユーザーがテーブルを更新していた場合、読み込もうとしたデータは、既に確定しているデータのスナップショットになります。(クエリがシリアライズ可能な分離ルールに違反しているときは、クエリが停止する場合もあります。) 「同時書き込み操作を管理する」を参照してください。
DROP TABLE や TRUNCATE など、一部の DDL 操作は排他的ロックを生成します。このような操作により、データの読み取りが禁止されます。
ロックの競合が発生すると、Amazon Redshift はエラーメッセージを表示して、競合するトランザクションを開始したユーザーに警告します。ロックの競合が発生したトランザクションは停止されます。ロックの競合が発生すると、Amazon Redshift は必ず STL_TR_CONFLICT テーブルにエントリを書き込みます。
構文
LOCK [ TABLE ] table_name [, ...]
パラメータ
- TABLE
-
オプションキーワード
- table_name
-
ロックするテーブルの名前。テーブル名のカンマ区切りリストを使って、複数のテーブルをロックできます。ビューをロックすることはできません。
例
begin; lock event, sales; ...