]ここでlockmodeには以下のいずれかが入ります。TABLEはテーブルレベルのロックを取得します。必要であれば競合するロックが解除されるまで待機します。NOWAITが指定された場合は、対象のロックを取得できるまで待機せず、すぐにロックが取得できなければ、このコマンドを中止し、エラーを出力します。TABLEといったコマンドはありません。ロックが解除されるのは常にトランザクションの終了時です)。テーブルを参照するコマンドのために自動的にロックを取得する場合、PostgreSQLは使用可能な一番弱いロックモードを常に使用します。TABLEはより制限の強いロックが必要な場合のために用意されています。COMMITTEDでトランザクションを実行するアプリケーションで、トランザクションの間中、テーブルのデータを確実に安定させる必要がある場合を考えます。この場合、問い合わせ実行前にテーブル全体にSHAREロックモードを使用します。これにより、データが同時に変更されるのを防ぎ、それ以降のテーブルの読み取りは、コミット済みの安定したデータが見えるようになります。EXCLUSIVEを保持しているトランザクションがコミットまたはロールバックされるのを待つからです。したがって、一度ロックを取得してしまえば、コミットされていない状態の書き込みは存在しないことになります。ロックを解除するまで他のアプリケーションは書き込みを開始することができません。TABLE文を実行する必要があります。READまたはSERIALIZABLEトランザクション側から参照するデータの状態は、最初にSELECT文またはデータ更新用文が開始された時点で固定されます。TABLEを実行した場合も同時書き込みを防ぐことはできますが、トランザクションの読み込み対象データの値がコミットされた最新の値であることは保証されません。EXCLUSIVEロックモードを使用する必要があります。これによって、この種のトランザクションが同時に複数実行されることがなくなります。EXCLUSIVEを使用しないと、デッドロックが発生する可能性があります。EXCLUSIVEを獲得することができます。EXCLUSIVEを獲得することはできません)。デッドロックを回避するには、全てのトランザクションが、必ず同一オブジェクトに対して同一の順番でロックを取得するようにしてください。1つのオブジェクトに対して複数のロックモードを呼び出す場合、トランザクションは常に最も制限の強いモードを最初に取得するべきです。ロックモードとロック取得方針についてのより詳細については13.3を参照してください。パラメータnameロックする既存のテーブルの名前です(スキーマ修飾名も可)。テーブル名の前にONLYが指定された場合、そのテーブルのみをロックします。ONLYが指定されない場合、そのテーブルとすべての子テーブル(もしあれば)をロックします。オプションで、テーブル名の後に*を指定することで、明示的に継承するテーブルも含まれることを示すことができます。テーブルは1つひとつLOCKで指定された順番でロックされます。lockmodeロックモードには、取得するロックと競合するロックを指定します。ロックモードについては、13.3で説明します。EXCLUSIVEが使用されます。TABLEが競合するロックの解放まで待機しないことを指定します。指定したロックがすぐに取得できない場合、トランザクションはアボートされます。MODEには、対象テーブルのSELECT権限が必要です。MODEには、対象テーブルのINSERT、UPDATE、DELETEまたはTRUNCATE権限が必要です。他の形式のLOCKには、テーブルレベルのUPDATE、DELETEあるいはTRUNCATE権限を持たなければなりません。TABLEはトランザクションブロックの外側では意味がありません。文が完了するまでしかロックは保持されません。したがってPostgreSQLはLOCKがトランザクションブロックの外側で使用された場合にエラーを報告します。トランザクションブロックを定義するためにはBEGINおよびCOMMIT(またはROLLBACK)を使用してください。LOCKが扱うのはテーブルレベルのロックのみです。そのため、モード名にROWが含まれるのは適切ではありません。これらのモード名は、普通は、ロックされたテーブル内で行レベルのロックを取得する意図と解釈されるでしょう。EXCLUSIVEモードは共有可能なテーブルロックです。TABLEに関しては、全てのロックモードが同じ意味を持っており、違うのは、どのモードがどのモードと競合するかという規則だけであることに注意して下さい。行レベルでのロックを獲得する方法についてはSELECT参照マニュアルの13.3.2とロック処理句を参照してください。外部キーテーブルへの挿入を行う際に、主キーテーブルへのSHAREロックを獲得します。レコードがなければROLLBACKしてください。EXCLUSIVEロックを取得します。TABLEはありません。TRANSACTIONが使用されます。PostgreSQLはこのコマンドもサポートしています。TRANSACTIONを参照してください。TABLE構文はOracleのものと互換性があります。